Ứng dụng của tôi bao gồm một số hội đồng cốt lõi và một số cụm mở rộng/plugin. Để cho MEF biết tất cả các phần mà các plugin phải cung cấp, tôi phải tải các assembly này ngay cả khi tôi không bao giờ sử dụng bất kỳ phần nào của chúng. Điều này làm cho ứng dụng mất nhiều thời gian hơn để bắt đầu (nếu tôi sẽ nạp tất cả các assembly khi khởi động) và cũng làm tăng lượng bộ nhớ.Việc tải các cụm/danh mục tải xuống một cách lười biếng
Lý tưởng nhất, tôi sẽ không phải tải các hội đồng cho đến khi tôi thực sự cần chúng. Tôi sẽ chỉ tải dữ liệu xuất của các plugin và khi tôi thực sự cần nhập một phần, MEF sẽ tải assembly và cung cấp một phần.
Tôi thấy rằng có điều gì đó làm khá nhiều thứ tôi vừa viết, nhưng sau khi hỏi về nó trong MEF CachedAssemblyCatalog - Lazy Loading of Assemblies, tôi nhận thấy mã này không được coi là ổn định và không được nhóm MEF duy trì, vì vậy tôi đã quyết định không sử dụng nó.
Câu hỏi của tôi là như thế nào thì tôi có thể đạt được hành vi này:
- Có khả năng truy cập vào siêu dữ liệu xuất khẩu lắp ráp Plugin mà không cần tải toàn bộ lắp ráp của họ.
- Tích hợp trong suốt với mã nhập các phần; tức là sử dụng hàng nhập khẩu như thường lệ - một người khác (danh mục chuyên biệt?) sẽ chăm sóc tải các hội đồng nếu cần và cung cấp phần được yêu cầu.
- Không mất bất kỳ chức năng MEF hiện có như recomposition, loại lười biếng vv
Tôi hoàn toàn tốt với một giải pháp mà đòi hỏi phải phân tích các plugins trước để tạo ra một lắp ráp siêu dữ liệu, tập tin XML hoặc không có điều gì.
Xin chào Petrik, cảm ơn rất nhiều sự giúp đỡ của bạn! Tôi tình cờ gặp câu hỏi mà bạn đã liên kết trước đây và nó đã giúp tôi rất nhiều trong việc giải quyết vấn đề này. Những gì tôi đã kết thúc làm là một cái gì đó tương tự như những gì bạn mô tả ở đó - Tôi tuần tự hóa dữ liệu vào một tập tin và tạo ra một cửa hàng mới mà tiêu thụ tập tin đó. Bằng cách này, tất cả các xuất khẩu bao gồm siêu dữ liệu có sẵn và sử dụng API 'ReflectionModelServices', mọi thứ đều được tải một cách lười biếng. Điều này có vẻ như là cách tốt nhất để đi cho các yêu cầu của tôi. Tôi hy vọng tôi sẽ có thời gian để tự trả lời câu hỏi này với những gì tôi đã làm. Cảm ơn một lần nữa! –