欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

為什么要使用Ninject?

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

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

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);
}

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

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

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

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

那么我們該怎么使用Ninject幫我們解決上述的問題呢?

其實使用Ninect不難,一共三個步驟:

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

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

可能有點點強迫癥吧,覺得這么一坨東西放在那里好礙眼吖,不可能叫我每一個動作里面都寫這一坨東西吧,當然不是。

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

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這個是System.Mvc里面的繼承這個接口必須實現(xiàn)GetServices和GetService,AddBinding這個方法是用來綁定實現(xiàn)類和接口

GetService方法中的TryGet類似于上面的Get,當沒有合適的綁定時,這個會返回一個null值,不會拋異常,而GetServices方法中的GetAll對單一類型的多個綁定時,可以用到這個

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

這時候我們修改下控制器中的代碼

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

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這個有兩個參數(shù)一個是屬性名,一個是屬性值,這樣子可以一開始就給這個屬性賦值上默認值,個人感覺作用倒是不大,也有其他的方法可以實現(xiàn)同樣效果

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

好了,Ninject就介紹到這了,如有不對,請多多包涵

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • ASP.NET操作Word的IIS權限設置

    ASP.NET操作Word的IIS權限設置

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

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

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

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

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

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

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

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

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

    .NET數(shù)組使用中的注意事項小結

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

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

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

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

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

    ASP.NET?Core?MVC控制器請求依賴注入

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

    .Net?Core跨平臺應用開發(fā)串口篇HelloArm

    這篇文章介紹了.Net?Core跨平臺應用開發(fā)串口篇HelloArm,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01

最新評論