使用MEF导入许多实例

本文关键字:实例 许多 导入 MEF 使用 | 更新日期: 2023-09-27 18:27:28

我正在导出一些实现IFoo接口的类,比如这个

public interface IFoo { }
[Export("A", typeof(IFoo))]
public class Foo1 : IFoo { }
[Export("B", typeof(IFoo))]
public class Foo2 : IFoo { }

当我尝试使用导入其中一个时

 containter.GetExportedValue<IFoo>("A"); 

它运行得很好,但当我试图像这个一样导入所有它们时

[ImportMany]
IFoo[] foos;

它不起作用。

有人能告诉我如何解决这个问题吗?

使用MEF导入许多实例

要实现这两种方式,请声明两个导出:

public interface IFoo { }
[Export(typeof(IFoo))]
[Export("A", typeof(IFoo))]
public class Foo1 : IFoo { }
[Export(typeof(IFoo))]
[Export("B", typeof(IFoo))]
public class Foo2 : IFoo { }

然后它应该会起作用(我做了一个测试样本并使其起作用)。

HTH,

巴布。

删除导出中的合同名称。

[Export("A", typeof(IFoo))]

[Export(typeof(IFoo))]

在第一种情况下,您导出的是与名称"a"和类型IFoo匹配的合同,而在导入中,您导入的是与类型IFoo(没有合同名称)的合同匹配的所有内容,因此不考虑使用合同名称的导出。

正如狒狒提到的,你可以双管齐下。你应该考虑在你的申请中是否需要两者,如果不是这样,我只会坚持一种方法,让事情尽可能简单,否则我建议使用他的方法。