2013-03-31 69 views
3

我瞭解Ninject的一些功能,並已將其用於IoC。MVC3項目中標準ninject和ninject.web.mvc之間的區別?

當我在VS2010中使用NuGet添加對Ninject項目的引用時,我會看到列表中的其他Ninject擴展。具體來說Ninject.MVC3。另外在Ninject網站的擴展(http://www.ninject.org/extensions.html)我看到Ninject.Web.Mvc。

如果我正在創建MVC3應用程序,我是否需要使用Ninject的這個擴展?我使用類/接口的IoC基本使用Ninject是否需要超出標準庫的任何內容?

MVC3項目中Ninject和Ninject.MVC3/Ninject.Web.Mvc有什麼區別?

回答

4

ninject.web.mvc是ASP MVC(3)應用程序的ninject(核心)補充。基本上 - 你應該使用它,當你想在一個ASP MVC項目中使用Ninject時。

documentation

這一擴展使得Ninject核心和ASP.NET MVC 項目之間的整合。要使用它,只是讓你的HttpApplication(通常在 Global.asax.cs中)延長NinjectHttpApplication:

MVC 3擴展中包含重要的方法要連接的DI組成根到MVC應用程序 - 這意味着Ninject會負責實例化你的控制器,它依賴於其他組件(Ninjects'重寫'使用DefaultControllerFactory,它只能創建帶有無參數構造函數的控制器)。

在本文檔中提及的有兩種方法,how to do it:要麼在延伸的global.asaxNinjectHttpApliaction使用App_Start文件夾內的NinjectWebCommon類。

還有ninject.web.common擴展名,這是ninject.web.mvc需要的擴展名。它包含例如InRequestScope的定義。

+0

你是說ninject.web.mvc允許ninject與MVC應用程序的MVC特定類/接口進行交互,而標準ninject不支持它們嗎? 我可能需要更多地瞭解Ninject在MVC應用程序中處理控制器的各種原因和示例。 – seangwright

+0

不是。關鍵是'ninject.web.mvc'提供了擴展控制器工廠,它能夠在控制器(使用'ninject.core')中注入依賴關係(根據組合根中定義的綁定 - 通常是global.asax)。所以你不需要以某種方式通過你的應用程序傳遞一個ninject'kernel'實例 - 它可以用服務定位器模式聞到 - 並且可以享受(構造函數)依賴注入的好處。 – mipe34

相關問題