Model view controller 将MEF插件导入MVC控制器

Model view controller 将MEF插件导入MVC控制器,model-view-controller,import,service,plugins,mef,Model View Controller,Import,Service,Plugins,Mef,有几个使用MEF将整个控制器/视图包插入MVC应用程序的例子,但我没有找到一个,使用MEF插入其他控制器使用的功能部分 例如,设想一个具有简单界面的新闻服务,如 interface INewsService { List<NewsItem> GetAllNews(); } INewsService中的接口 { 列出GetAllNews(); } 它可以在任何地方获取新闻,并将其返回到新闻项列表中。我的页面应该加载导出的INewsService并在页面上显示新闻 但问题是。

有几个使用MEF将整个控制器/视图包插入MVC应用程序的例子,但我没有找到一个,使用MEF插入其他控制器使用的功能部分

例如,设想一个具有简单界面的新闻服务,如

interface INewsService
{
    List<NewsItem> GetAllNews();
}
INewsService中的接口 { 列出GetAllNews(); } 它可以在任何地方获取新闻,并将其返回到新闻项列表中。我的页面应该加载导出的INewsService并在页面上显示新闻

但问题是。我不能只在控制器中使用[Import],因为它们只是在需要时创建的

Edit:(将它们导入主MVCAPApplication类不起作用,因为我无法从控制器访问它。) 我想我找到了通过HttpContext.ApplicationInstance访问主应用程序的方法。但此实例中的服务对象为null,尽管它是在应用程序_Start()方法中成功创建的。知道为什么吗

那么,如何从控制器中访问新闻服务

提前感谢,,
标记您需要创建MEF ControllerFactory,它将使用MEF CompositionContainer创建满足其导入的控制器。然后,您可以将INewsService导入到控制器上

下面是一个演示如何做到这一点的示例


编辑:这里有另一个看起来简单一点的方法。

我不喜欢添加自定义ControllerFactory的方法,但它似乎是目前为止唯一好的解决方案。