MEF和同一类的两个实例

zac*_*ary 3 mef

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

Mat*_*ott 9

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

你每次撰写时都想要一个新的实例吗?

如果是这样,您可以添加PartCreationPolicyAttribute到您的导出:

[PartCreationPolicy(CreationPolicy.NonShared), Export(typeof(IFoo))]
public class Foo : IFoo { }
Run Code Online (Sandbox Code Playgroud)

每当你使用容器编写一个类时,你都会得到一个新的实例Foo.

你想同时拥有两个独立的实例吗?

您可能想要考虑获取零件实例的替代模式.你可以使用一个ExportFactory允许你在需要的时候创建新实例,例如:

[Import]
public ExportFactory<IFoo> Factory { get; set; }
Run Code Online (Sandbox Code Playgroud)

附:

public IFoo CreateFoo()
{
    return Factory.CreateExport().Value;
}
Run Code Online (Sandbox Code Playgroud)

(要ExportFactory<T>与非Silverlight应用程序一起使用,您应该在此处下载- ExportFactory<T>从未进入.NET 4,仅使用Silverlight).