我有一个支持可视化插件/提供程序的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; }
然后导入应该自动发生。我错过了什么阻止自动导入?
另外,我目前使用的代码是否会破坏网站的缩放?
谢谢, 埃里克
答案 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);
等。
我希望这说明了我的观点。