2009-12-09 24 views
12

Tôi đang cố gắng che giấu tâm trí của mình xung quanh MEF. Có một điều tôi không hiểu.MEF: Điều gì xảy ra nếu tôi có nhiều lần xuất nhưng chỉ cần một lần nhập?

Giả sử rằng tôi có giao diện, có tên ISomething, là hợp đồng và tôi có nhiều hơn một hội đồng trong một thư mục chứa ứng dụng của tôi và tôi không biết có bao nhiêu triển khai ISomething chứa một.

Nếu tôi tạo ứng dụng máy chủ lưu trữ trong đó tôi sử dụng MEF và muốn nhận IS IS, nhưng chỉ có một, MEF sẽ quyết định triển khai sẽ cung cấp cho tôi như thế nào?

Hoặc, tương tự như một thùng chứa IoC thông thường, làm thế nào để tôi biết nó nên triển khai thực hiện gì?

Cảm ơn trước vì câu trả lời của bạn.

Trả lời

12

Xem this blog post để thảo luận về vấn đề này và một số tùy chọn bạn có. Ngoài ra, Glenn Block có một bài đăng trên blog mô tả cách làm thế nào để customize the container behavior with defaults.

+1

Bài đăng của Glenn về ExportProviders vừa cho tôi một ý tưởng hay. Có lẽ tôi nên làm cho một ExportProvider chấp nhận một số loại cấu hình trong đó xuất khẩu mặc định có thể được chỉ định. – Venemo

+1

Điều đó hoàn toàn có thể gây được tiếng vang, và đó là một trong những kịch bản mà chúng tôi đã xem xét. –

11

Trong trường hợp của MEF, nếu bạn có nhiều Xuất khẩu rằng sẽ làm hài lòng một Import, bạn có hai lựa chọn:

  1. Thay đổi nhập của bạn xung quanh để sử dụng [ImportMany]. Quyết định, tại thời gian chạy, trong đó Nhập khẩu để sử dụng cho hợp đồng của bạn, có khả năng chỉ cần chọn đầu tiên, hoặc một cách ngẫu nhiên.
  2. Sử dụng [ImportMany] kết hợp với Metadata để quyết định Nhập sẽ sử dụng.
+0

Đây là một ý tưởng hay, tuy nhiên, tôi thích làm một cái gì đó giống như ở Windsor, để xác định việc triển khai cụ thể từ cấu hình và yêu cầu MEF sử dụng nó. – Venemo

+0

@Venemo: Bạn có thể thực hiện điều đó bằng cách sử dụng siêu dữ liệu khi chạy. –

Các vấn đề liên quan