Sửa lỗi nếu tôi sai, nhưng MEF chỉ tốt cho việc quản lý một tập hợp những thứ không rõ (plugin) có thể được tự động phát hiện và tự động kết nối. Đối với một dự án tương lai, chúng ta sẽ cần một container IoC đúng để cấu hình một cách rõ ràng các phần đã biết của ứng dụng (nhưng MEF không tốt) nhưng ngoài ra chúng ta cũng cần hỗ trợ các plugin tự động phát hiện (tốt nhất là POCO không có thuộc tính). Có thể một container IoC hỗ trợ điều này một cách dễ dàng/theo mặc định? Nếu vậy bạn có thể đưa ra một gợi ý nhanh về cách thực hiện điều này trong Unity và StructureMap như thế nào? Đó là hai chúng tôi hiện đang ủng hộ. Chúng tôi thực sự muốn tránh sự phụ thuộc vào container IoC và MEF.Sử dụng thùng chứa IoC cho kiến trúc plugin
Trả lời
Tôi nghĩ rằng điều quan trọng cần lưu ý là mặc dù MEF không phải là một container IoC theo nghĩa thông thường, nó đang thực hiện đảo ngược kiểm soát. Trong thực tế, tôi sẽ không đồng ý với điều đó và nói rằng MEF là một container IoC giống như bất kỳ container nào khác. Sự khác biệt thực sự giữa việc nói Unity và MEF, là MEF theo mặc định hỗ trợ bố cục trên độ phân giải loại rõ ràng và loại khám phá qua cấu hình. Nhưng, như chúng ta đã thấy với dự án MEFContrib, nó hoàn toàn có thể có MEF hoạt động giống như một container IoC truyền thống. MEF cung cấp cho bạn một đường cơ sở tuyệt vời cho hành vi thành phần mô-đun, lấy rất nhiều việc ghép cứng và cách nó được thiết kế, nó cho phép bạn thêm vào nhiều chức năng hơn. Giả sử bạn có codebase hiện tại của bạn được xây dựng xung quanh một vùng chứa IoC khác hoặc định vị dịch vụ, bạn có thể kết nối một số ExportProvider
để làm như vậy, bạn có thể kết nối nhà cung cấp với một trình định vị dịch vụ như dự án Common Service Locator và sau đó cắm vào một tương thích Triển khai CSL và có MEF soạn các phần thành phần bằng cách sử dụng các kiểu bắt nguồn từ thùng chứa IoC khác của bạn. MEF cũng thực hiện tiêm phụ thuộc cho bạn.
Nếu bạn muốn tránh có sự phụ thuộc vào một thùng chứa IoC cụ thể hoặc bản thân MEF, bạn luôn có thể sử dụng một cái gì đó giống như Bộ định vị dịch vụ thông thường trừu tượng hóa các hoạt động bình thường. Bằng cách đó nếu bạn cần/muốn thay đổi cách mọi thứ được kết lại với nhau, nó tương đối không đau. Có các triển khai CSL tương thích cho hầu hết các thùng chứa IoC và MEF.
Hy vọng điều đó sẽ hữu ích.
MEF Contrib có cho phép các bộ phận là POCO không có thuộc tính không? – bitbonk
Mô hình được phân bổ chỉ là mô hình lập trình mặc định cho MEF. MEFContrib có một 'ConventionCatalog', kết hợp với' PartRegistry' cho phép bạn đăng ký các loại giống như container như Unity/Autofac/Windsor, v.v. –
- 1. Khi nào sử dụng thùng chứa IOC?
- 2. Cách sử dụng Thùng chứa IoC; Cụ thể là Windsor
- 3. Kiến trúc "plugin" ứng dụng Web Java
- 4. Thùng chứa IoC cho Thư viện Lớp Di động
- 5. Kiến trúc SOA với WCF + Cấu trúc IOC
- 6. Các loại nguyên thủy và các thùng chứa IoC
- 7. Kiến trúc Net và plugin
- 8. Kiến trúc Plugin trong PHP
- 9. OOD sử dụng các thùng chứa IoC - cách xây dựng các đối tượng phụ thuộc?
- 10. Kiến trúc Plugin Spring MVC
- 11. sử dụng thùng chứa bitset trong C++
- 12. Kiến trúc giống như plugin trong .NET
- 13. kiến trúc Plugin trong .net:. Dỡ
- 14. Kiến trúc plugin ngôn ngữ trung lập
- 15. Ký hiệu không xác định cho kiến trúc x86_64: Tôi nên sử dụng kiến trúc nào?
- 16. Kiến trúc sắc nét cho ứng dụng Winform?
- 17. Classpath cho plugin kiến khi sử dụng ANTBuilder từ Gradle
- 18. kiến trúc cho tính khả dụng cao
- 19. Tại sao xml lại nổi bật trong các thùng chứa IOC?
- 20. Lỗi trong khi tải xuống thùng chứa Unity IoC từ Nuget
- 21. Kiến trúc cho các ứng dụng WinForms?
- 22. Kiến trúc N-Layer
- 23. Xây dựng Kiến trúc Plugin với Adobe AIR
- 24. Một container IoC đơn giản cho một hệ thống plugin nhỏ
- 25. Sử dụng lớp Python như một thùng chứa dữ liệu
- 26. Sử dụng std :: unique_ptr với các thùng chứa tiêu chuẩn
- 27. Không hiểu nơi để tạo IoC Container trong kiến trúc hệ thống
- 28. Thùng chứa trong khung lò xo là gì?
- 29. Chỉ định hàm tạo cho vùng chứa Unity IoC để sử dụng
- 30. Sử dụng Ninject trong kiến trúc ứng dụng SOLID
Có gì sai khi sử dụng MEF cho plugin? Nó được thiết kế chính xác cho trường hợp sử dụng đó và một phần của khung công tác .Net. – jeroenh
Hãy xem tại Spring.Net. –
Bạn nói rằng bạn muốn tránh có một container IoC và MEF, vì vậy tôi sẽ không đăng bài này như là một câu trả lời. Nhưng [Autofac] (http://nblumhardt.com/2010/04/introducing-autofac-2-1-rtw/) tích hợp khá tốt với MEF. –