標籤:依賴 依賴注入 eval span 通過 com limits when 判斷
本文參考:http://www.cnblogs.com/willick/p/3223042.html
1、Ninject是一款輕量級的DI工具,可通過VS的外掛程式NuGet將其引用到項目中。
2、使用Ninject的步驟:
//建立Ninject核心執行個體IKernel ninjectKernel = new StandardKernel();
//綁定介面到實現了該介面的類。這種綁定告訴Ninject,當接收到一個請求IValueCalculator的實現時,返回一個LinqValueCalcutor的執行個體ninjectKernel.Bind<IValueCalculator>().To<LinqValueCalculator<();
// 獲得實現介面的對象執行個體。Ninject將自動為我們建立LinqValueCalculator類的執行個體,並返回該執行個體的引用IValueCalculator calcImpl = ninjectKernel.Get<IValueCalculator>();
// 建立ShoppingCart執行個體並注入依賴ShoppingCart cart = new ShoppingCart(calcImpl);
// 計算商品總價錢並輸出結果Console.WriteLine("Total: {0:c}", cart.CalculateStockValue());
3、當請求Ninject建立某個類型的執行個體時,它會檢查這個類型和其它類型之間的耦合關係。如果存在依賴關係,那麼Ninject會根據依賴處理理它們,並建立所有所需類的執行個體。
4、Ninject綁定時為屬性賦值(支援鏈式文法):
ninjectKernel.Bind<IDiscountHelper>().To<DefaultDiscountHelper>().WithPropertyValue("DiscountSize", 5M).WithPropertyValue("DiscountSize2", 5M);
5、Ninject綁定時為建構函式傳參(支援鏈式文法):
ninjectKernel.Bind<IDiscountHelper>().To< DefaultDiscountHelper>().WithConstructorArgument("discountParam", 5M).WithConstructorArgument("discountParam2", 5M);
6、Ninject的自綁定:
//沒有建構函式參數、屬性需要賦值時刺句可省略ninjectKernel.Bind<ShoppingCart>().ToSelf();//這種寫法不需要關心ShoppingCart類依賴哪個介面,也不需要手動去擷取該介面的實現(calcImpl)。//當通過這句代碼請求一個ShoppingCart類的執行個體的時候,Ninject會自動判斷依賴關係,並為我們建立所需介面對應的實現。ShoppingCart cart = ninjectKernel.Get<ShoppingCart>();
7、Ninject的衍生類別綁定:
//衍生類別綁定,其中LimitShoppingCart是ShoppingCart的子類ninjectKernel.Bind<ShoppingCart>().To<LimitShoppingCart>().WithPropertyValue("ItemLimit", 3M);
8、Ninject的條件綁定:
//條件綁定,IValueCalculator介面現在有兩個實現:IterativeValueCalculator和LinqValueCalculator。
//下列語句意思是:如果是把該介面的實現注入到LimitShoppingCart類,那麼就用IterativeValueCalculator,其他情況都用LinqValueCalculator。ninjectKernel.Bind<IValueCalculator>().To<LinqValueCalculator>();ninjectKernel.Bind<IValueCalculator>().To<IterativeValueCalculator>().WhenInjectedInto<LimitShoppingCart>();
【ASP.NET MVC 學習筆記】- 05 依賴注入工具Ninject