我想在Castle Monorail上使用Ninject 2。在谷歌搜索,我发现没有。
我知道Windsor可以与Monorail集成,与Ninject(带MVC扩展)和ASP.NET MVC一样。
我需要采取哪些步骤将DI框架(Windsor除外)与Monorail集成? (任何网站链接,教程或代码示例(最好使用Ninject 2))
fyi,我正在使用C#
答案 0 :(得分:2)
我认为没有关于此的任何文档,但它确实非常简单。这没有什么神奇之处。由于MonoRail和Windsor是完全独立的项目,所有你需要做的就是see how they integrate,然后对Ninject而不是Windsor做同样的事情。
更具体地说,从作为集成根的MonoRailFacility开始。您可以使用Ninject模块代替Windsor工具。注意它注册了一些组件:IControllerTree,IWizardPageFactory等。最重要的是IControllerFactory,它允许你从容器中解析控制器(在你的情况下为Ninject)。您现在可以保留所有其他默认值(例如IFilterFactory / DefaultFilterFactory),并根据需要实现它们(即,当您需要过滤器的容器控制时)。
然后调用ServiceProviderLocator.Instance.AddLocatorStrategy(new NinjectAccessorStrategy());
其中NinjectAccessorStrategy
是IAccessorStrategy
的实现,它将Ninject内核作为Castle.Core.IServiceProviderEx
返回(这只是{{1}的一个简单扩展})。由于Ninject内核已经实现了System.IServiceProvider
,因此为IServiceProvider
编写适配器是微不足道的。