2011-05-24 74 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