将MEF插件导入MVC控制器

时间:2010-05-17 13:40:22

标签: model-view-controller import service plugins mef

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

例如,考虑使用像

这样的简单界面的NewsService
interface INewsService
{
    List<NewsItem> GetAllNews();
}

随时随地获取新闻,并将其返回到NewsItems列表中。我的页面应加载导出的INewsService并在页面上显示新闻。

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

编辑:(将它们导入主MVCApplication类不起作用,因为我无法从控制器访问它。) 我想我找到了一种通过HttpContext.ApplicationInstance访问主应用程序的方法。但是,虽然它是在Application_Start()方法中成功创建的,但此实例中的Service对象为null。知道为什么吗?

那么,我如何从控制器中访问NewsService?

提前致谢, 标记

1 个答案:

答案 0 :(得分:3)

您需要创建一个MEF ControllerFactory,它将使用MEF CompositionContainer创建一个满足其导入的控制器。然后,您可以在控制器上放置一个INewsService导入。

以下是sample,其中显示了如何执行此操作。

编辑:这是另一个sample,看起来有点简单。