使用MEF导入许多实例

时间:2012-03-09 17:19:44

标签: c# mef

我正在导出一些实现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;

它不起作用。

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

2 个答案:

答案 0 :(得分:9)

要两种方式,请声明2个出口:

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,

巴布。

答案 1 :(得分:3)

删除导出的合同名称。

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

[Export(typeof(IFoo))]

在第一个场景中,您正在导出与名称“A”和类型IFoo匹配的合同,而在导入许多中,您导入的所有内容都与IFoo类型的合同(无合同名称)相匹配,因此导出为合同名称不予考虑。

正如狒狒所说,你可以两种方式。你应该考虑在你的申请中是否需要两者,如果不是这样的话,我会坚持只用一种方法让事情变得尽可能简单,否则我建议用他的方法。