2011-03-08 92 views

回答

8

默认情况下,向MEF注册的任何部分都使用单一策略进行生命周期管理(每个容器一个)。这是用Shared的默认CreationPolicy指定的。我认为你需要明确你需要什么...

你想在每次撰写新的实例吗?

如果是这样,你可以一个PartCreationPolicyAttribute添加到您的出口:

[PartCreationPolicy(CreationPolicy.NonShared), Export(typeof(IFoo))] 
public class Foo : IFoo { } 

您撰写使用容器类的任何时间,你会得到的Foo一个新的实例。

你想在同一时间两个独立的实例吗?

您可能想要考虑用于获取零件实例的替代模式。你可以使用一个ExportFactory这将允许你创建新实例,当你需要它,比如:

[Import] 
public ExportFactory<IFoo> Factory { get; set; } 

有了:

public IFoo CreateFoo() 
{ 
    return Factory.CreateExport().Value; 
} 

(要使用ExportFactory<T>与非Silverlight应用程序,你应该下载here - ExportFactory<T>从来没有进入.NET 4,只有Silverlight)。

+0

ExportFactory现在是.NET 4.5的一部分 – slfan 2013-07-11 14:21:13