如何将同一类或接口的两个实例放入MEF?我该如何找回它们?
答案 0 :(得分:8)
默认情况下,在MEF注册的任何部分都使用单例策略进行生命周期管理(每个容器一个)。这是使用CreationPolicy
的默认Shared
指定的。我想你需要明确你需要什么......
每次撰写时,您是否想要新实例?
如果是这样,您可以在导出中添加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)。