我正在使用MEF创建一个支持插件的MVC 5应用程序。使用来自MEF的IControllerFactory和IOC我已经使它工作,以便/app/specialcontroller/action
从另一个dll(插件)调用动作和控制器。
我遇到的问题是,当加载bundles
和content
时,控制器工厂失败,因为content
和bundles
未从插件中导出。
我希望将默认工厂用于某些“控制器”名称。
这可能吗?
这是我基于它的答案...... MEF with MVC 4 or 5 - Pluggable Architecture (2014)
包括app/bundles/jquery
时,我希望它使用bundles
希望有道理,谢谢
答案 0 :(得分:0)
在这种情况下,我之前在我的一个项目中使用了以下控制器工厂 -
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();
}
}
}
对于bundles
和content
,控制器类型通常是null
,所以我只是为它们返回了null -
if(controllerType == null)
{
return null;
}
并让它们由默认控制器提供服务。我的其他网址仅由控制器bundles
和contents
提供,所以这对我有用。可能不是最好的解决方案但是当我使用MEF
创建控制器工厂时,这解决了我的问题。您可以尝试此解决方案,这可能对您有所帮助。