天天看點

【轉】輕量級IOC架構:Ninject

建議新手請先看看Ninject的介紹:

<a href="http://ninject.codeplex.com/wikipage?title=What%20Is%20Ninject%3F&amp;referringTitle=User%20Guide">What Is Ninject</a>

<a href="http://ninject.codeplex.com/wikipage?title=Why%20Use%20Ninject%3F&amp;referringTitle=User%20Guide">Why Use Ninject</a>

我節選其中關于Ninject的好處,并翻譯如下:

Ninject是一個快如閃電、超輕量級的基于.Net平台的依賴注入架構。它能夠幫助你把應用程式分離成一個個松耦合、高内聚的子產品,然後用一種靈活的方式組裝起來。通過使用Ninject配套你的軟體架構,那麼代碼将會變得更加容易編寫、重用性強、易于測試和修改。

搜尋部落格園尚未找到關于Ninject的使用,是以本文釋出一個示例作入門級教程。

像以前的IOC教程那樣,拿日志記錄做示例應該是非常直覺的。

首先編寫一個日志記錄的接口:

以及FlatFileLogger, DatabaseLogger 來實作Logger的邏輯(隻是為了示範Ninject的使用,是以具體邏輯是省略的,隻是通過控制台告訴大家使用了那個Logger):

Ninject通過NinjectModule來配置依賴注入(不知道有沒有檔案配置,在官方教程裡沒找到相關資料),這裡自定義自己的Module:

具體調用方法:

通過 kernel.Get&lt;ILogger&gt;() 來擷取ILogger的執行個體,之前在MyModule裡先後對ILogger 綁定了FlatFileLogger 和 DatabaseLogger,而kernel.Get&lt;ILogger&gt;() 這裡傳回第一個綁定的對象,即FlatFileLogger。

這裡建立一個ITester 和 IocTester, 而IocTester 依賴于ILogger:

下面看看Ninject是怎麼配置的,很簡單修改MyModule,綁定ITester:Bind&lt;ITester&gt;().To&lt;IocTester&gt;():

從以上配置中,我們是看不到IocTester 和ILogger 是有依賴關系的,這就是依賴注入的好處。隻是簡單告訴哪個接口對應哪個類,剩下的任務就可以交給Ninject來處理了。

另外Ninject 也支援屬性、方法等注入,具體可以參考使用者向導。

IOC的世界有句話是這樣說的:Don't call me, I will call you.

介紹Ninject 在ASP.NET MVC 的應用(英文)

<a href="http://codeclimber.net.nz/archive/2009/08/14/how-to-use-ninject-2-with-asp.net-mvc.aspx" target="_blank">How to use Ninject 2 with ASP.NET MVC</a>

另一篇關于微軟的IOC架構Unity的介紹:

<a href="http://www.cnblogs.com/coolcode/archive/2009/05/25/1488792.html">IOC : Unity 配置和使用</a>

本文轉自齊師傅部落格園部落格,原文連結:http://www.cnblogs.com/youring2/archive/2012/05/28/2520992.html,如需轉載請自行聯系原作者