代码之家  ›  专栏  ›  技术社区  ›  Erick T

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

  •  1
  • Erick T  · 技术社区  · 14 年前

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

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

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

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

    另外,我现在使用的代码是否会破坏网站的伸缩性?

    谢谢, 埃里克

    2 回复  |  直到 14 年前
        1
  •  0
  •   Damian Schenkelman    14 年前

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

    一些选项包括:

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

    在其他中。

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

        2
  •  1
  •   hammett    14 年前

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