2011-05-24 76 views
1

我想在城堡單軌上使用Ninject 2。在谷歌搜索,我沒有發現這一點。城堡單軌和Ninject 2集成

我知道有溫莎它奇蹟般地能與單軌整合,同Ninject(與MVC擴展)與ASP.NET MVC。

哪些步驟,我需要做整合DI框架(比溫莎等)與單軌? (任何網站鏈接,教程,或代碼示例(最好使用Ninject 2))

僅供參考,我使用C#

回答

2

我不認爲有這個的任何文件,但它真的很簡單。沒有魔法。由於MonoRail和Windsor是完全獨立的項目,因此您只需要執行see how they integrate,然後對Ninject而不是Windsor執行相同操作。

更具體而言,先從MonoRailFacility其是融合的根。而不是溫莎工廠,你會使用Ninject模塊。注意它註冊了一些組件:IControllerTree,IWizardPageFactory等。最重要的是IControllerFactory,它可以讓你從容器中解析控制器(在你的情況下是Ninject)。您現在可以保留所有其他的默認設置(例如,IFilterFactory/DefaultFilterFactory),並根據需要實施它們(即,當您需要對過濾器進行容器控制時)。

然後調用ServiceProviderLocator.Instance.AddLocatorStrategy(new NinjectAccessorStrategy());其中NinjectAccessorStrategyIAccessorStrategy實現其返回Ninject內核作爲Castle.Core.IServiceProviderEx(這也不過是System.IServiceProvider微不足道的擴展名)。由於Ninject內核已經實現了IServiceProvider,所以編寫適用於IServiceProviderEx的適配器並不重要。

+0

謝謝。會試試這個! – 2011-05-29 03:22:09

+0

這樣做時,我發現NinjectServiceProvider需要使用'kernel.TryGet ()'而不是'kernel.Get ()',以便在類型未註冊時返回null。這會觸發MonoRail使用默認實現。 – 2013-02-15 20:56:44