我在我的应用程序中使用 MEF 作为 IOC。我发现自己陷入了这样一种情况,即我的应用程序中的一个类一次只需要两个实例(跨所有线程)。我认为只需使用不同的容器名称添加两次导出属性,然后使用该容器名称创建两个实例就很容易了。
[Export("Condition-1",typeof(MyClass)]
[Export("Condition-2",typeof(MyClass)]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.Shared)]
public class MyClass { }
然后将它们导出为
Container.GetExport<MyClass>("Condition-1").Value
Container.GetExport<MyClass>("Condition-2").Value
但是这个技巧没有奏效。我终于能够通过使用 CompsositionBatch 解决我的问题
cb.AddExportedValue<MyClass>("Condition-1",new MyClass());
cb.AddExportedValue<MyClass>("Condition-2",new MyClass());
但我的问题是,为什么我不能根据合同名称获得不同的实例。如果 CreationPolicy 是共享的,合同名称是否无关紧要?