【问题标题】:Castle Monorail and Ninject 2 integrationCastle Monorail 和 Ninject 2 集成
【发布时间】:2023-04-07 16:00:01
【问题描述】:

我想在 Castle Monorail 上使用 Ninject 2。在google上搜索,我没有找到任何相关信息。

我知道 Windsor 可以神奇地与 Monorail 集成,就像 Ninject(带有 MVC 扩展)与 ASP.NET MVC 一样。

将 DI 框架(Windsor 除外)与 Monorail 集成需要执行哪些步骤? (任何网站链接、教程或代码示例(最好使用 Ninject 2))

fyi,我使用的是 C#

【问题讨论】:

    标签: ninject castle-monorail


    【解决方案1】:

    我不认为有任何关于此的文档,但这真的很简单。它没有魔法。由于 MonoRail 和 Windsor 是完全独立的项目,您只需 see how they integrate,然后对 Ninject 而不是 Windsor 执行相同操作。

    更具体地说,从 MonoRailFacility 开始,它是集成的根源。您将使用 Ninject 模块,而不是 Windsor 设施。请注意,它注册了一些组件:IControllerTree、IWizardPageFactory 等。最重要的是 IControllerFactory,它允许您从容器中解析控制器(在您的情况下为 Ninject)。您可以暂时保留所有其他默认设置(例如 IFilterFactory/DefaultFilterFactory),并根据需要实现它们(即当您需要容器控制过滤器时)。

    然后调用ServiceProviderLocator.Instance.AddLocatorStrategy(new NinjectAccessorStrategy());,其中NinjectAccessorStrategyIAccessorStrategy 的实现,它将Ninject 内核作为Castle.Core.IServiceProviderEx 返回(这只是System.IServiceProvider 的一个微不足道的扩展)。由于 Ninject 内核已经实现了IServiceProvider,因此为IServiceProviderEx 编写一个适配器很简单。

    【讨论】:

    • 在执行此操作时,我发现 NinjectServiceProvider 需要使用 kernel.TryGet<T>() 而不是 kernel.Get<T>() 以便在未注册类型时返回 null。这会触发 MonoRail 使用默认实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多