首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MEF在每个应用程序中最多允许2个实例

使用MEF在每个应用程序中最多允许2个实例
EN

Stack Overflow用户
提问于 2013-03-26 01:24:25
回答 1查看 153关注 0票数 1

我在我的应用程序中使用MEF作为IOC。我发现自己陷入了这样一种情况:我的应用程序中的一个类一次只需要两个实例(跨所有线程)。我认为只需添加两次具有不同容器名称的导出属性,然后使用该容器名称创建两个实例,就会很容易。

代码语言:javascript
复制
[Export("Condition-1",typeof(MyClass)]
[Export("Condition-2",typeof(MyClass)]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.Shared)]
public class MyClass  {   }

,然后将它们导出为

代码语言:javascript
复制
Container.GetExport<MyClass>("Condition-1").Value
Container.GetExport<MyClass>("Condition-2").Value

但是这个把戏并不管用。我终于能够用CompsositionBatch解决我的问题了

代码语言:javascript
复制
cb.AddExportedValue<MyClass>("Condition-1",new MyClass());
cb.AddExportedValue<MyClass>("Condition-2",new MyClass());

但我的问题是,为什么我不能根据合同名称获得不同的实例。如果CreationPolicy是共享的,那么合同名称无关紧要,对吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-26 17:19:03

问题出在装饰MyClassPartCreationPolicyAttribute的设置中。

CreationPolicy.Shared意味着每次调用Container.GetExport都会返回一个实例。它就像一个单例。在您的案例中,您需要的是CreationPolicy.NonShared策略,该策略将为Container.GetExport返回每个clla的不同实例。

这里有一篇关于Part Creation Policy的好文章。另外,还可以了解有关部件的生命周期和共享的MEF2添加的ExportFactory in MEF 2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15621009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档