C# Ninject使用


  Ninject是一個IOC容器,用來解決程序中組件的耦合問題,它的目的在於做到最少配置。簡單來講就是 為我們選擇一個想要的類來處理事務。

百度百科的解釋:一個快如閃電、超輕量級的基於.Net平台的依賴注入框架。把應用程序分離成一個個松耦合、高內聚的模塊,然后用一種靈活的方式組裝起來。

一、Console項目使用

參考:[ASP.NET MVC 小牛之路]04 - 依賴注入(DI)和Ninject

NuGet引入:Ninject

/// <summary>

        /// 1、簡單的情況,實現類 沒有依賴其他類

        /// </summary>

        public static  void Simple()

        {

            //一般的使用情況

            Business bus = new Business(new LinqValueCalculator());

            decimal result = bus.CalculatStockValue();

            Console.WriteLine(result);

 

            //使用Ninject。。LinqValueCalculator綁定接口

            //1、創建一個Ninject內核對象

            IKernel ninjectKernel = new StandardKernel();

 

            //2、將想使用的類型和他的接口進行綁定,告訴Ninject,當接收到一個實現IValueCalculater的請求的時候,

            //創建並返回LinqValueCalculator這個類,上面的兩個關鍵字Bind,To可以幫助我們理解他的意思。

            ninjectKernel.Bind<IValueCalculater>().To<LinqValueCalculator>();

 

            //3、用Ninject的Get方法去獲取IValueCalculator接口的實現

            //Ninject將自動為我們創建LinqValueCalculator類的實例,並返回該實例的引用。

            IValueCalculater calcImpl = ninjectKernel.Get<IValueCalculater>();

 

            //4、創建Business實例並注入依賴(calcImpl)

            Business business = new Business(calcImpl);

            Console.WriteLine(business.CalculatStockValue());

        }
View Code

代碼:https://github.com/peterYong/SelfTest/tree/master/Ninject.Test

對於單個簡單的DI,用Ninject確實顯得麻煩。但如果添加多個復雜點的依賴關系,使用Ninject則可大大提高編碼的工作效率

當我們請求Ninject創建某個類型的實例時,它會檢查這個類型和其它類型之間的耦合關系。如果存在依賴關系,那么Ninject會根據依賴處理理它們,並創建所有所需類的實例。

拓展:

using (var kernel = new StandardKernel(new BookingServiceNinjectModule(),new CacheNinjectModule()))
            {
                Client = kernel.Get<IHoldTaskCksService>();
                Redis = kernel.Get<ICacheManager>(CacheTypeName.Redis);
            }

二、MVC中使用Ninject

代碼:https://github.com/peterYong/SelfTest/tree/master/Ninject.MVC

參考:[ASP.NET MVC 小牛之路]05 - 使用 Ninject

  1、創建Controller Factory

在ASP.NET MVC中,一個客戶端請求是在特定Controller的Action中進行處理的。

默認情況下,ASP.NET MVC使用內置的Controller工廠類 DefaultControllerFactory來創建某個請求對應的Controller實例。

有時候默認的Controller工廠不能滿足我們實際的需求,我們就需要對這種默認行為進行擴展,即創建一個繼承自DefaultControllerFactory類的自定義Controller工廠類(NinjectControllerFactory)並重寫其中的一些方法。

  2、設置工廠

Controller工廠類創建好后,我們就需要告訴MVC用我們的NinjectControllerFactory類來創建Controller對象,為此,需在Global.asax文件的Application_Start方法中注冊

  3、添加領域模型

准備數據

  4、添加接口,Repository

需要一種方式來從數據庫中讀取Book數據。

在這我們不防為數據的使用者(這里指Controller)提供一個IBookRepository接口,在這個接口中聲明一個IQueryable<Book>類型的屬性Books。

這樣,通過該接口使用依賴注入,使用者就可以拿到Books數據集合,而不用關心數據是如何得到的。

為此,我們在BookShop.Domain工程中添加一個名為 Abstract的文件夾,在該文件夾中添加我們的IBookRepository接口文件,

  5、添加接口實現

添加一個名為Implement文件夾用於存放具體的類。添加一個實現了IBookRepository接口的BookRepository類來作為我們的Book數據倉儲。

  6、添加綁定

private void AddBindings() {
    ninjectKernel.Bind<IBookRepository>().To<BookRepository>();
}

  7、添加控制器

顯示列表

  8、添加視圖

顯示數據

 

更多參考:輕量級IOC框架:Ninject

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM