【问题标题】:Can I load controllers in Monorail using MEF?我可以使用 MEF 在 Monorail 中加载控制器吗?
【发布时间】:2010-09-15 22:36:28
【问题描述】:

我在工作中的几个项目中使用过 MEF,我只是在业余时间盯着 Monorail 玩弄。我想知道是否有任何方法可以使用 MEF 加载 Monorail 使用的控制器。 Monorail 似乎在您在 Web.Config 中列出的程序集中寻找控制器:

<controllers>
  <assembly>my.assembly</assembly>
</controllers>

有没有办法让 'my.assembly' 然后使用 MEF 加载更多控制器?我不得不承认我没有理由需要这个功能,但我只是在尝试!

【问题讨论】:

    标签: c# mef castle-monorail


    【解决方案1】:

    Monorail 是一个非常可扩展的框架。几乎所有东西都由可以轻松切换到其他东西的服务提供。 例如,IoC 集成非常简单,因为您可以切换创建控制器、过滤器、助手和所有其他 MonoRail 实体的服务。

    具体例子:Integrating Windsor container into Monorail

    现在这设置了温莎提供的几乎所有单轨列车。如果您只希望 MEF 提供 Controller,则工作量就更少了。

    我对 MEF 的工作知识知之甚少,因此可能有点偏离,但您会大致了解:

    1. 使用 MEF 发现机制来定位控制器类型,然后将控制器类型添加到默认的 IControllerTree 服务。查看MonoRailFacility.cs 以获得灵感。
    2. 实现MefControllerFactory : IControllerFactory,它将在需要时使用 MEF 实例化控制器。灵感来自WindsorControllerFactory.cs

    【讨论】:

    • 这个页面 (blogs.msdn.com/b/hammett/archive/2009/04/23/…) 帮助了我的 IControllerFactory。但是 MonoRailFacility 似乎可以通过 Windsor 访问默认的 IControllerTree。我应该如何访问它?
    • 我相信您需要访问 Mef 目录而不是 Windsor 的 IControllerTree 实现,以便为您提供控制器。 Hammet 的示例有一个 MecControllerCatalog 供参考。我没有太多的 Mef 经验,所以那些部分的细节不会来自我,对不起:)
    • Hammet 的 MefControllerFactory 执行 MEF 加载。但是 MR 只在默认的 IControllerTree 服务中查找控制器。看起来我可以编写自己的 IControllerTree 服务,也可以将控制器添加到现有的服务中。看起来hammett.castleproject.org/?p=159 和“在运行时添加控制器和视图”部分为我指明了正确的方向。如果我的 MefControllerFactory 覆盖 Service(System.IServiceProvider service) 那么我可以: IControllerTree tree = service.GetService(typeof(IControllerTree)); tree.AddController("area", "Home", typeof(MyCoolController));
    • MefControllerFactory 显然必须继承 AbstractControllerFactory...
    【解决方案2】:

    这还不是您可以使用的东西,但请查看 Hammett 的博客文章 here,他在其中谈到了他正在为 MonoRail 3.0 设计的原型(包括默认支持 MEF)。

    【讨论】:

    • 看起来很有希望。可能需要一段时间才能发布/稳定
    猜你喜欢
    • 2023-03-10
    • 2021-08-09
    • 2017-09-30
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2014-07-27
    相关资源
    最近更新 更多