MEF和同一类的两个实例

时间:2011-03-08 21:43:16

标签: mef

如何将同一类或接口的两个实例放入MEF?我该如何找回它们?

1 个答案:

答案 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)。