2010-05-20 34 views
7

Rõ ràng .NET 4.0 không có PartCreator/ExportFactory cho non-SL. Đó là điều tôi nghĩ tôi cần cho việc này.Nhiều trường hợp của một DLL MEF duy nhất

Tôi đã tự hỏi nếu ai đó có thể giúp tôi (với một ví dụ xin vui lòng) làm thế nào để tạo ra nhiều trường hợp của loại XUẤT KHẨU trong một DLL. Về cơ bản nói rằng tôi có một DLL có chứa một loại ConsoleLogger và nó sử dụng giao diện ILogger (mà tôi nhập/xuất thông qua MEF) ... Làm thế nào tôi sẽ tạo ra một thể hiện của ConsoleLogger bất cứ khi nào tôi muốn? Ngoài ra..Là điều này thậm chí có thể?

Trả lời

8

Một cách để thực hiện việc này là viết một nhà máy cho bản ghi nhật ký và sử dụng nó làm hợp đồng bạn xuất.

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

Sau đó, bạn chỉ cần nhập LoggerFactory và gọi CreateLogger mỗi lần bạn cần nhật ký. Điều này là khá nhiều điều tương tự bạn sẽ làm gì nếu bạn nhập khẩu ExportFactory. Nhược điểm là bạn phải viết một nhà máy riêng biệt cho mỗi điều bạn muốn để có thể tạo ra nhiều trường hợp.

Một tùy chọn khác là thêm ExportProvider vào vùng chứa của bạn, cho phép bạn nhập các nhà máy. Trong bản tóm tắt MEF mới nhất trên CodePlex, có một mẫu DynamicInstantiation trình bày cách thực hiện điều này.

+0

Cảm ơn. Tôi nghĩ rằng điều này sẽ làm việc cho tình hình của tôi. – Travyguy9

0

MEF 2 Preview 1 mang ExportFactory vào .NET 3.5 và 4.0:

  • ExportFactory chuyển từ SL để net
  • phiên bản máy tính để bàn Một số mã
  • tái cấu trúc và cải tiến về hiệu suất
  • Hợp đồng Mã Cả hội là
  • tên mạnh được ký
Các vấn đề liên quan