2010-05-20 86 views
7

顯然.NET 4.0沒有針對非SL的PartCreator/ExportFactory。這是我認爲我需要的東西。單個MEF DLL的多個實例

我想知道是否有人可以幫助我(請舉例)如何在DLL中創建多個EXPORTED類型的實例。基本上說,我有一個包含一個類型ConsoleLogger的DLL,它使用ILogger接口(我通過MEF導入/導出)...如何在任何時候創建ConsoleLogger實例?也......這甚至可能嗎?

回答

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

然後,您只需導入一個LoggerFactory,並在每次需要記錄器時調用CreateLogger。這與您導入ExportFactory時所做的幾乎完全相同。缺點是你必須爲每個你想要創建多個實例的東西編寫一個單獨的工廠。

另一種選擇是將ExportProvider添加到允許導入工廠的容器中。在CodePlex上的最新MEF分析中,有一個DynamicInstantiation示例顯示瞭如何執行此操作。

+0

謝謝。我認爲這將適用於我的情況。 – Travyguy9 2010-05-21 14:28:53

0

MEF 2 Preview 1帶來ExportFactory到.NET 3.5和4.0:

  • ExportFactory從SL移動到.NET
  • 桌面版的某些代碼
  • 重構和PERF改進
  • 代碼契約兩個組件分別是
  • 強命名簽署