使用MEF在控制器中导入值集合的最佳方法

时间:2010-10-22 22:56:34

标签: asp.net asp.net-mvc-2 dependency-injection mef

我有一个支持可视化插件/提供程序的ASP.NET MVC2应用程序。 IVisualization接口在一个通用程序集中定义,该程序集由ASP.NET MVC2应用程序和任何可视化提供程序引用。

在Visualization控制器中,我有一个方法,它返回给定数据集的所有适用可视化。为了扫描可用的提供程序,我在控制器的ActionMethod中使用以下代码。

var catalog = new DirectoryCatalog(HttpRuntime.BinDirectory); 
var container = new CompositionContainer(catalog);
var visualizations = container.GetExportedValues<IVisualization>();

但是,我觉得如果我在控制器中有以下内容

[ImportMany]
public IEnumerable<IVisualization> Visualizations { get; set; }

然后导入应该自动发生。我错过了什么阻止自动导入?

另外,我目前使用的代码是否会破坏网站的缩放?

谢谢, 埃里克

2 个答案:

答案 0 :(得分:1)

为了使MEF满足导入,它还需要负责控制器的实例化。您可以使用自定义控制器工厂在MVC中执行此操作。您可以在我的博客中找到一个样本(可能已过时):http://blogs.msdn.com/b/hammett/archive/2009/07/15/mef-and-asp-net-mvc-sample-updated.aspx

答案 1 :(得分:0)

如果你有一个声明特定属性导入的控制器,你必须以编程方式调用MEF的一个方法来满足它们。

有些选择是:

container.GetExportedValues<MyController();
container.ComposeParts(controllerInstance);

等。

我希望这说明了我的观点。