单个MEF DLL的多个实例

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

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

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

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); } } 

然后,您只需导入LoggerFactory,并在每次需要记录器时调用CreateLogger。 这与导入ExportFactory时要做的几乎相同。 缺点是你必须为你想要创建多个实例的每个东西编写一个单独的工厂。

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

MEF 2 Preview 1将ExportFactory引入.NET 3.5和4.0:

  • ExportFactory从SL移动到.net
  • 桌面版有些代码
  • 重构和性能改进
  • 代码合同两个程序集都是
  • 强名称签名