【问题标题】:A MEF Plugin for MVC5MVC5 的 MEF 插件
【发布时间】:2014-06-19 17:46:28
【问题描述】:

我正在使用 MEF 创建一个支持插件的 MVC 5 应用程序。使用来自 MEF 的 IControllerFactory 和 IOC 我已经让它工作,以便 /app/specialcontroller/action 从另一个 dll(插件)调用动作和控制器。

我遇到的问题是,当 bundlescontent 加载时,控制器工厂失败,因为 contentbundles 没有从插件中导出。

我希望对某些“控制器”名称使用默认工厂。

这可能吗?

这是我基于它的答案... MEF with MVC 4 or 5 - Pluggable Architecture (2014)

当包含app/bundles/jquery 时,我希望它为bundles 使用MVC 控制器

希望有道理,谢谢

【问题讨论】:

  • 据我了解,您想将插件中的 css 和 js 文件添加到捆绑表中?

标签: asp.net-mvc asp.net-mvc-5 mef


【解决方案1】:

在这种情况下,我之前在我的一个项目中使用了以下控制器工厂 -

namespace CaterPiller.WebClient.Factories
{
    public class MvcControllerFactory : DefaultControllerFactory
    {
        private readonly CompositionContainer _container;
        public MvcControllerFactory(CompositionContainer container)
        {
            _container = container;
        }

        protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
        {
            if(controllerType == null)
            {
                return null;
            }
            var export = _container.GetExports(controllerType, null, null).FirstOrDefault();
            return null == export
                       ? base.GetControllerInstance(requestContext, controllerType)
                       : (IController) export.Value;
        }

        public override void ReleaseController(IController controller)
        {
            ((IDisposable) controller).Dispose();
        }
    }
}

对于bundlescontent,控制器类型通常是null,所以我只是为它们返回了null-

if(controllerType == null)
                {
                    return null;
                }

并让它们由默认控制器提供服务。我的其他网址仅由控制器提供 bundlescontents 没有,所以这对我有用。可能不是最好的解决方案,但这解决了我当时使用MEF 创建控制器工厂时的问题。您可以尝试此解决方案,这可能会对您有所帮助。

【讨论】:

  • 我的实现只有 CreateController、ReleaseController 和 GetControllerSessionBehavior。没有 GetControllerInstance。我错过了什么吗?
  • GenControllerInstance 是控制器类的实际解析器(因为使用 MEF,我使用的是服务定位器模式)。
  • 我明白,但是没有GetControllerInstance可以覆盖,只有CreateController、ReleaseController和GetControllerSessionBehavior
  • @user3036342 不确定你的实现,我的这个项目有1.5年的历史了,所以它可能是mvc4,不确定他们是否在mvc5上改变了它。
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2012-10-09
相关资源
最近更新 更多