单个MEF DLL的多个实例

Tra*_*uy9 7 c# mef

显然.NET 4.0没有非SL的PartCreator/ExportFactory.这是我认为我需要的东西.

我想知道是否有人可以帮助我(请举例说明)如何在DLL中创建EXPORTED类型的多个实例.基本上我说我有一个包含ConsoleLogger类型的DLL,它使用接口ILogger(我通过MEF导入/导出)...我怎么会在想要的时候创建一个ConsoleLogger实例?也..这甚至可能吗?

Dan*_*ted 8

一种方法是自己为记录器编写工厂,并将其用作导出的合同.

public class Logger : ILogger
{
    public Logger(IFoo foo) { }
    // ...
}

[Export(typeof(ILoggerFactory))]
public class LoggerFactory : ILoggerFactory
{
    [Import]
    public IFoo Foo { get; set; }

    public ILogger CreateLogger()
    {
        return new Logger(Foo);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您只需导入LoggerFactory,并在每次需要记录器时调用CreateLogger.这与导入ExportFactory时的操作非常相似.缺点是你必须为你希望能够创建多个实例的每个东西编写一个单独的工厂.

另一种选择是将ExportProvider添加到容器中,以允许您导入工厂.在CodePlex的最新MEF下降中,有一个DynamicInstantiation示例,它显示了如何执行此操作.