单个MEF DLL的多个实例

问题描述:

显然.NET 4.0没有针对非SL的PartCreator/ExportFactory。这是我认为我需要的东西。单个MEF DLL的多个实例

我想知道是否有人可以帮助我(请举例)如何在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示例显示了如何执行此操作。

+0

谢谢。我认为这将适用于我的情况。 – Travyguy9 2010-05-21 14:28:53

MEF 2 Preview 1带来ExportFactory到.NET 3.5和4.0:

  • ExportFactory从SL移动到.NET
  • 桌面版的某些代码
  • 重构和PERF改进
  • 代码契约两个组件分别是
  • 强命名签署