2011-08-07 29 views
2

在我的班级我有一个类,进口一类这样的:MEF:如何检索某个类型的新实例?

[Import] 
public ContactViewModel ContactViewModel { get; set; } 

类型是这样定义的:

[PartCreationPolicy(CreationPolicy.NonShared)] 
[Export(typeof(ContactViewModel))] 
public class ContactViewModel {} 

我期待时,我会从属性看,得到一个新的实例对吗? 或者可能不是......我一直得到相同的实例,如何在使用该属性时强制使我成为新实例?

非常感谢,

回答

4

您确定您正在重新组织您的消费者类吗? NonShared创建策略将确保每次创建新零件时都会创建一个新实例,所以我会检查它的另一面,这就是您所在的类。这堂课是否正确重组?

你的另一种选择是使用一个ExportFactory,例如:

[Import] public ExportFactory<ContactViewModel> ViewModelFactory { get; set; } 
+0

由于马特,no类拥有上面的属性是一个控制器(共享)类,因此它不应该被重新合成。我认为工厂就是解决方案。让我试试看。 – Houman

+0

非常感谢。有用!所以这就像在Unity中一样_container.Resolve ();正确? – Houman

1

您应该创建一个工厂和出口,与其然后用它作为你的财产。当MEF构建具有依赖关系的对象时,MEF部分创建策略不适用于访问这些依赖关系时。