最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET MVC使用Ninject的方法教程

 更新時(shí)間:2018年12月09日 09:27:35   作者:我不要做碼農(nóng)  
這篇文章主要給大家介紹了關(guān)于ASP.NET MVC使用Ninject的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家啊的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

為什么要使用Ninject?

很多其它類型的IOC容器過于依賴配置文件,老是配置,總感覺有點(diǎn)不爽,而且要使用assembly-qualified名稱(也就是類型的全名)來進(jìn)行定義,稍不注意就會(huì)因?yàn)榇蝈e(cuò)字而令整個(gè)程序崩掉。Ninject是一個(gè)快如閃電、超輕量級(jí)的基于.Net平臺(tái)的IOC容器,主要用來解決程序中模塊的耦合問題,它的目的在于做到最少配置。因此如果你不喜歡配置,不喜歡重量級(jí)IOC框架,那么就用小蘋果Ninject吧!

Ninject是一個(gè)快如閃電的,輕量級(jí)的。。。。。依賴注入框架,呃呃呃,貌似很少用到,Ninject就是一個(gè)DI容器,作用是對(duì)ASP.NET MVC程序中的組件進(jìn)行解耦 ,說到解耦其實(shí)也有其他的方式可以達(dá)到解耦這個(gè)目的,比如接口

public interface ITest
{
 Decimal ValueProducts(IEnumerable<Product>products) ;
}
public class Test:ITest
{
 public Decimal ValueProducts(IEnumerable<Product>products) 
 {
 return products.sum(p=>p.Price);
 }
}
public class ShoppingCart
{
 private ITest test;
 public IEnumerable<Product>products{set;get;}
 public ShoppingCart( ITest test)
 {
 this.test=test;
 }
 public Decimal result(products);
}

通過接口可以說達(dá)到了我們想要的結(jié)果,也就是Shopping和Test之間的耦合。但是在控制器中卻沒辦法達(dá)到這個(gè)目的

public ActionResult Index(){
 ITest IT=new Test();
 ShoppingCart cart=new ShoppingCart(IT);{Products=products};
 Decimal total=IT.result();
 return View(total);
}

我們只能借助Ninject來幫我們實(shí)現(xiàn)

可以通過nuget下載Ninect也可以通過Ninject下載

那么我們?cè)撛趺词褂肗inject幫我們解決上述的問題呢?

其實(shí)使用Ninect不難,一共三個(gè)步驟:

//在控制器
public ActionResult Index()
{
 1:創(chuàng)建一個(gè)Ninject的內(nèi)核
 IKernel ninject=new StandardKernel();
 2:就是配置Ninject內(nèi)核,其實(shí)就是將實(shí)現(xiàn)類和接口類綁定在一起
 ninject.Bind<ITest>().To<Test>();
 3:最后一步就是使用Ninject創(chuàng)建一個(gè)對(duì)象了
 ITest IT=ninject.Get<ITest>();
}

從創(chuàng)建內(nèi)核到創(chuàng)建對(duì)象跟Spring.Net倒是很相似。

可能有點(diǎn)點(diǎn)強(qiáng)迫癥吧,覺得這么一坨東西放在那里好礙眼吖,不可能叫我每一個(gè)動(dòng)作里面都寫這一坨東西吧,當(dāng)然不是。

下面就創(chuàng)建一個(gè)依賴項(xiàng)解析器(好像很高大上一樣,其實(shí)就是將上面的代碼做個(gè)封裝而已)

public class NinjectResolver:IDependencyResolver
{
 private IKernel kernel;
 public NinjectResolver(IKernel kernel)
 {
 this.kernel=kernel; 
 AddBinding();
 }
 public IEnumerable<Object> GetServices(Type serviceType)
 {
 return kernel.GetAll(serviceType);
 }
 public Object GetService(Type serviceType)
 {
 return kernel.TryGet(serviceType);
 } 
 void AddBinding()
 {
 kernel.Bind<ITest>().To<Test>();
 }
}

IDependencyResolver這個(gè)是System.Mvc里面的繼承這個(gè)接口必須實(shí)現(xiàn)GetServices和GetService,AddBinding這個(gè)方法是用來綁定實(shí)現(xiàn)類和接口

GetService方法中的TryGet類似于上面的Get,當(dāng)沒有合適的綁定時(shí),這個(gè)會(huì)返回一個(gè)null值,不會(huì)拋異常,而GetServices方法中的GetAll對(duì)單一類型的多個(gè)綁定時(shí),可以用到這個(gè)

最后一步就是在App_Start這一個(gè)文件夾中找到NinjectWebCommon.cs這個(gè)文件再找到 RegisterServices(IKernel kernel)這個(gè)方法添加System.Web.Mvc.DependencyResolver.SetResolver(newNinjectResolver(kernel));

這時(shí)候我們修改下控制器中的代碼

private ITest test;
public HomeController(ITest test)
{
 this.test=test;
}
public ActionResult Index(){
 ShoppingCart cart=new ShoppingCart(IT);{Products=products};
 Decimal total=IT.result(); return View(total);
}

Ninject大概的用法也差不多了,下面說的時(shí)Ninject比較新穎的東西
就是指定屬性或者構(gòu)造函數(shù)傳值了,其實(shí)也沒什么,只是WithConstructorArgument和WithPropertyValue這兩個(gè)的使用

public interface IHelper
 {
 Decimal ApplyDiscount(Decimal totalParam); 
 }
 public class Helper : IHelper
 {
 public Decimal DiscountSize { set; get; } 
 
 public decimal ApplyDiscount(decimal totalParam)
 {
 return (totalParam - (discountparam / 100m * totalParam));
 }
 }
private void AddBindings()
 {
 kernel.Bind<ITest>().To<Test>();
 
 kernel.Bind<IHelper>().To<Helper>().WithPropertyValue("DiscountSize", 50M); kernel.Bind<IHelper>().To<Helper>().WithConstructorArgument("discountparam", 50M);
 }

WithPropertyValue這個(gè)有兩個(gè)參數(shù)一個(gè)是屬性名,一個(gè)是屬性值,這樣子可以一開始就給這個(gè)屬性賦值上默認(rèn)值,個(gè)人感覺作用倒是不大,也有其他的方法可以實(shí)現(xiàn)同樣效果

WithConstructorArgument這個(gè)也差不多,參數(shù)一是構(gòu)造函數(shù)的形參,后面的參數(shù)是值

好了,Ninject就介紹到這了,如有不對(duì),請(qǐng)多多包涵

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • .NET/C#如何使用反射注冊(cè)事件詳解

    .NET/C#如何使用反射注冊(cè)事件詳解

    反射是.NET中的重要機(jī)制,下面這篇文章主要給大家介紹了關(guān)于.NET/C#如何使用反射注冊(cè)事件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • asp.net 動(dòng)態(tài)表單之?dāng)?shù)據(jù)分頁

    asp.net 動(dòng)態(tài)表單之?dāng)?shù)據(jù)分頁

    我們很常會(huì)在項(xiàng)目中提到一個(gè)動(dòng)態(tài)表單的概念,比如學(xué)校里面學(xué)生的考試成績(jī),當(dāng)學(xué)生登錄系統(tǒng)的時(shí)候,他當(dāng)然是希望看到他自己所有科目的成績(jī);又或者是班主任,他需要看到本班同學(xué)所有科目的成績(jī);這些時(shí)候我們一般都會(huì)在頁面中呈現(xiàn)如下的效果。
    2010-03-03
  • JQuery為用戶控件(ASCX)賦值與接口的應(yīng)用

    JQuery為用戶控件(ASCX)賦值與接口的應(yīng)用

    在網(wǎng)頁動(dòng)態(tài)加載用戶控件,并使用JQuery為來把網(wǎng)頁處理的值傳給用戶控件,此文利用了接口方面的知識(shí),感興趣的各位可以參考下哈
    2013-03-03
  • asp.net CheckBoxList各項(xiàng)最小寬度CSS樣式(兼容性good)

    asp.net CheckBoxList各項(xiàng)最小寬度CSS樣式(兼容性good)

    ASP.NET中,CheckBoxList里的選擇都是自動(dòng)寬度的,屬性時(shí)沒有設(shè)置各項(xiàng)寬度的設(shè)置,在IE10、遨游4極速模式及兼容模式下均可正確顯示最小寬度,此樣式除了用于CheckBoxList外,也可用于DIV等
    2013-04-04
  • ASP.NET MVC5網(wǎng)站開發(fā)管理列表、回復(fù)及刪除(十三)

    ASP.NET MVC5網(wǎng)站開發(fā)管理列表、回復(fù)及刪除(十三)

    這篇文章主要介紹了ASP.NET MVC5網(wǎng)站開發(fā)實(shí)現(xiàn)管理列表、回復(fù)及刪除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-09-09
  • 關(guān)于中g(shù)ridview 字符串截取的方法

    關(guān)于中g(shù)ridview 字符串截取的方法

    在Gridview中,如果你的某一列字符串的長度過長,不做處理的話.那么將顯示的奇丑無比,可以采取設(shè)置樣式,將其顯示為定長,可以在點(diǎn)擊查看的時(shí)候,在另一個(gè)頁面對(duì)其進(jìn)行顯示
    2013-06-06
  • Net?core中使用System.Drawing對(duì)上傳的圖片流進(jìn)行壓縮(示例代碼)

    Net?core中使用System.Drawing對(duì)上傳的圖片流進(jìn)行壓縮(示例代碼)

    這篇文章主要介紹了Net?core中使用System.Drawing對(duì)上傳的圖片流進(jìn)行壓縮,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • ASP.NET中Global和URLReWrite用法

    ASP.NET中Global和URLReWrite用法

    這篇文章主要介紹了ASP.NET中Global和URLReWrite用法,較為深入淺出的分析了Global.asax的功能及配置技巧,并實(shí)例分析了URLReWrite實(shí)現(xiàn)偽靜態(tài)的方法,需要的朋友可以參考下
    2015-06-06
  • XAML: 自定義控件中事件處理的最佳實(shí)踐方法

    XAML: 自定義控件中事件處理的最佳實(shí)踐方法

    下面小編就為大家分享一篇XAML: 自定義控件中事件處理的最佳實(shí)踐方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • asp.net利用反射實(shí)現(xiàn)給model類賦值的方法

    asp.net利用反射實(shí)現(xiàn)給model類賦值的方法

    這篇文章主要介紹了asp.net利用反射實(shí)現(xiàn)給model類賦值的方法,結(jié)合實(shí)例形式分析了asp.net使用反射給model類賦值的操作步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03

最新評(píng)論

革吉县| 海盐县| 高尔夫| 肇源县| 砀山县| 高尔夫| 柘荣县| 永顺县| 思茅市| 云安县| 华池县| 江山市| 桃江县| 昭通市| 临洮县| 河间市| 乳源| 徐州市| 卫辉市| 平安县| 辰溪县| 大姚县| 石泉县| 古浪县| 古交市| 左云县| 个旧市| 九江县| 陈巴尔虎旗| 金坛市| 日土县| 南陵县| 浦江县| 兴仁县| 余干县| 义马市| 城步| 中牟县| 嵊泗县| 永仁县| 福州市|