2010-05-24 35 views
13

Tôi đã đọc ở đâu đó với MEF tôi có thể đơn giản thả một dll vào một thư mục và ứng dụng của tôi (với một số phép thuật MEF) sẽ có thể đọc và thực thi mã trong đó? Hy vọng rằng chỉ có các lớp thực hiện một giao diện mà tôi xác định?Giúp tôi bắt đầu với MEF

Ai đó có thể giúp tôi tiếp tục, với một số liên kết có thể cho vấn đề của tôi.

Tôi đã nhìn qua một số các tài liệu, nhưng không có vẻ là những gì tôi sau và khéo léo của mình khi tôi không biết chính xác những gì để tìm kiếm trên ...

Thx S

+1

MEF làm gì và khung DI làm gì không hoàn toàn giống nhau (mặc dù có chồng lên nhau, nhưng câu hỏi của bạn có thể không được gắn thẻ chính xác). Có một bài viết hay về cách làm cho chúng đặt đẹp ở đây http://blogs.msdn.com/nblumhardt/archive/2009/03/16/hosting-mef-extensions-in-an-ioc-container.aspx – R0MANARMY

Trả lời

6

Dưới đây là hai MEF bài viết "Bắt đầu" của Brad Abrams:

Lưu ý rằng chúng được viết bằng các phiên bản xem trước của MEF, do đó đã có một số thay đổi. Ví dụ, AttributedAssemblyCatalog đã được đổi tên thành AssemblyCatalog, AggregatingComposablePartCatalog bây giờ là AggregatingCatalog, và PackageCatalog trên Silverlight bây giờ là DeploymentCatalog, và đã có một số thay đổi API khác.

+2

Tuyệt vời. ..cảm ơn. Đối với bất kỳ ai khác, họ có thể thấy liên kết này hữu ích hơn ... nó được cập nhật thêm một chút. http://goo.gl/4jpD – SteveCl

2

Bạn có thể hỗ trợ 'Recomposition' bằng cách đánh dấu các hàng nhập khẩu như:

[ImportMany(AllowRecomposition=true)] 
public IMessageSender[] Senders { get; set; } 

Tuy nhiên, từ những gì tôi có thể nói điều này không tự động tải các hội đồng. Các phiên bản của MEF mà đã làm cho nó. NET 4 (và tôi đoán Preview 9 tại phức tạp) không xuất hiện để tải các hội đồng tự động. Tôi không chắc liệu hành vi này có thay đổi khi MEF được phát triển hay không.

Bạn sẽ cần phải thêm một FileSystemWatcher và gọi Refresh() trên ví dụ như DirectoryCatalog và lắng nghe cho một hoặc nhiều những sự kiện này:

catalog.Changed += new EventHandler<ComposablePartCatalogChangeEventArgs>(Catalog_Changed); 
container.ExportsChanged += new EventHandler<ExportsChangeEventArgs>(Container_ExportsChanged); 
directoryCat.Changed += new EventHandler<ComposablePartCatalogChangeEventArgs>(dCat_Changed); 
1

Đây là một demo application xây dựng với WPF, MVVM, và MEF (cho cả bố cục và độ mở rộng).

1

This article cung cấp một cách tiếp cận chung dễ dàng làm việc với MEF:

  1. Cách đơn giản nhất để (tổng quát) sử dụng MEF.
  2. Làm thế nào để sử dụng MEF hoàn toàn lười biếng cũng cho quá trình tải Dll.