我正在导出一些实现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;
它不起作用。
有人可以告诉我如何解决这个问题吗?
答案 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类型的合同(无合同名称)相匹配,因此导出为合同名称不予考虑。
正如狒狒所说,你可以两种方式。你应该考虑在你的申请中是否需要两者,如果不是这样的话,我会坚持只用一种方法让事情变得尽可能简单,否则我建议用他的方法。