MEF和同一类的两个实例
答
默认情况下,向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)。
ExportFactory现在是.NET 4.5的一部分 – slfan 2013-07-11 14:21:13