【问题标题】:How does one import multiple plugin/parts using MEF?如何使用 MEF 导入多个插件/部件?
【发布时间】:2009-09-18 15:30:59
【问题描述】:

我是 MEF 的新手,正在尝试使用它来构建插件系统,但卡在第一步。

我正在关注article by Andrew Whitechapel。我已经下载了他的示例代码,它运行良好(如果您删除了其中一个“导出”程序集 - 它们在他的示例中是互斥的 - 并引用 MEF 程序集)。

示例说明了导入单个部件。我想导入多个部分(都基于相同的界面)。因此,我将示例代码更改如下:

[Import]
// OLD - public Interface.ICalculate Calculate { get; set; }
public IEnumerable<Interface.ICalculate> Calculators { get; set; }

// OLD - Console.WriteLine(
// OLD -     String.Format("{0}", Calculate.Circumference(4)));
foreach (Interface.ICalculate calculator in Calculators)
{
    Console.WriteLine(
    String.Format("{0}", calculator.Circumference(4)));
}

我还为 IEnumerable 导入了 System.Collections.Generic。

关键变化是第一个。据我了解,这将允许我从多个组件中导入零件。但是,我收到以下错误:

No valid exports were found that match the constraint

此时我什至还没有添加多个“插件”程序集。还是只有那个。

为了完整起见,这是他在“插件”类库中的导出定义(我没有触及):

[Export(typeof(Interface.ICalculate))]
public class Calculate : Interface.ICalculate

有什么想法吗?我在这里挠头。我搜索了 SO 和 MEF 论坛,但可以找到任何可以启发我的东西。

我正在使用 VS 2008 SP1(未安装 2010 测试版)和最新的 System.ComponentModel.Composition 程序集 (2009.26.8.0)。

【问题讨论】:

    标签: c# mef


    【解决方案1】:

    MEF 预览版 5 改变了这一点。您现在需要使用 ImportManyAttribute 而不是 ImportAttribute:

    [ImportMany]
    public IEnumerable<Intertface.ICalculate> Calculators { get; set; }
    

    详情请见announcement for PR5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多