亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

為什么要使用Ninject?

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

Ninject是一個(gè)快如閃電的,輕量級(jí)的。。。。。依賴注入框架,呃呃呃,貌似很少用到,Ninject就是一個(gè)DI容器,作用是對(duì)ASP.NET MVC程序中的組件進(jìn)行解耦 ,說(shuō)到解耦其實(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);
}

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

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

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

可以通過(guò)nuget下載Ninect也可以通過(guò)Ninject下載

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

其實(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)類(lèi)和接口類(lèi)綁定在一起
 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)迫癥吧,覺(jué)得這么一坨東西放在那里好礙眼吖,不可能叫我每一個(gè)動(dòng)作里面都寫(xiě)這一坨東西吧,當(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è)方法是用來(lái)綁定實(shí)現(xiàn)類(lèi)和接口

GetService方法中的TryGet類(lèi)似于上面的Get,當(dāng)沒(méi)有合適的綁定時(shí),這個(gè)會(huì)返回一個(gè)null值,不會(huì)拋異常,而GetServices方法中的GetAll對(duì)單一類(lèi)型的多個(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大概的用法也差不多了,下面說(shuō)的時(shí)Ninject比較新穎的東西
就是指定屬性或者構(gòu)造函數(shù)傳值了,其實(shí)也沒(méi)什么,只是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è)是屬性值,這樣子可以一開(kāi)始就給這個(gè)屬性賦值上默認(rèn)值,個(gè)人感覺(jué)作用倒是不大,也有其他的方法可以實(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à)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • ASP.NET操作Word的IIS權(quán)限設(shè)置

    ASP.NET操作Word的IIS權(quán)限設(shè)置

    檢索 COM 類(lèi)工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時(shí)失敗,原因是出現(xiàn)以下錯(cuò)誤: 80070005。
    2011-02-02
  • asp.net repeater實(shí)現(xiàn)批量刪除

    asp.net repeater實(shí)現(xiàn)批量刪除

    asp.net repeater實(shí)現(xiàn)批量刪除實(shí)現(xiàn)效果代碼
    2009-03-03
  • asp.net 純真ip庫(kù)取得所在地實(shí)現(xiàn)代碼

    asp.net 純真ip庫(kù)取得所在地實(shí)現(xiàn)代碼

    asp.net 純真ip庫(kù)取得所在地實(shí)現(xiàn)代碼,需要的朋友可以參考一下。
    2009-05-05
  • 客戶端用JavaScript填充DropDownList控件 服務(wù)器端讀不到值

    客戶端用JavaScript填充DropDownList控件 服務(wù)器端讀不到值

    今天遇到一個(gè)奇怪的問(wèn)題,某一頁(yè)面需要使用三級(jí)級(jí)聯(lián)下拉列表框。為提高用戶體驗(yàn),采用jQuery的cascadingDropDown插件調(diào)用后臺(tái)Web Services來(lái)實(shí)現(xiàn)ajax填充。
    2010-09-09
  • .NET Core 3.0中WPF使用IOC的圖文教程

    .NET Core 3.0中WPF使用IOC的圖文教程

    這篇文章主要給大家介紹了關(guān)于在.NET Core 3.0中WPF使用IOC的圖文教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • .NET數(shù)組使用中的注意事項(xiàng)小結(jié)

    .NET數(shù)組使用中的注意事項(xiàng)小結(jié)

    這篇文章主要介紹了.NET數(shù)組使用中的注意事項(xiàng),總結(jié)了常見(jiàn)的三個(gè)數(shù)組使用中的注意事項(xiàng),對(duì)于.NET初學(xué)者有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • asp.net 獨(dú)立Discuz頭像編輯模塊分離打包

    asp.net 獨(dú)立Discuz頭像編輯模塊分離打包

    在Discuz產(chǎn)品系列(包括UCenter、UCHome)中有一個(gè)flash頭像上傳編輯的功能比較好用,和之前自己用js實(shí)現(xiàn)的照片在線編輯插件比較像,于是想將它獨(dú)立出來(lái),一方面可以學(xué)習(xí)研究,另一方面有機(jī)會(huì)可以在項(xiàng)目中使用(這里主要是指Asp.Net程序,php的與之類(lèi)似)。
    2011-06-06
  • MultiLine 換行后實(shí)現(xiàn)讀取不換行的具體思路

    MultiLine 換行后實(shí)現(xiàn)讀取不換行的具體思路

    輸入內(nèi)容中有換行,保存到數(shù)據(jù)庫(kù),直接查看感覺(jué)沒(méi)有換行,但查詢結(jié)果“以文本格式顯示結(jié)果”你就會(huì)發(fā)現(xiàn) 其實(shí)是有換行的,下面與大家分享下具體的解決方法
    2013-06-06
  • ASP.NET?Core?MVC控制器請(qǐng)求依賴注入

    ASP.NET?Core?MVC控制器請(qǐng)求依賴注入

    這篇文章介紹了ASP.NET?Core?MVC控制器請(qǐng)求依賴注入的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • .Net?Core跨平臺(tái)應(yīng)用開(kāi)發(fā)串口篇HelloArm

    .Net?Core跨平臺(tái)應(yīng)用開(kāi)發(fā)串口篇HelloArm

    這篇文章介紹了.Net?Core跨平臺(tái)應(yīng)用開(kāi)發(fā)串口篇HelloArm,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01

最新評(píng)論