Które części MEF należy dostosować do dynamicznego ładowania wtyczek w aplikacji rozproszonej

Moja aplikacja symulacyjna będzie korzystała z wtyczek w celu zapewnienia algorytmów symulacji i struktur danych do przechowywania danych symulacji. Aplikacja składa się z dwóch części. Pierwsza to aplikacja hosta, która udostępnia interfejs użytkownika (jako interfejs WPF lub wtyczka do aplikacji CAD). Ta aplikacja obsługuje wszystkie interakcje z użytkownikiem, ale nie wykonuje żadnych obliczeń symulacyjnych, ani nie przechowuje żadnych danych symulacyjnych. Druga część to aplikacja do danych, która wykonuje obliczenia symulacyjne. Aplikacja danych nie ma żadnego sposobu na bezpośrednią interakcję użytkownika z nią, wszystkie dane wejściowe są dostarczane przez połączenie z hostem (albo za pośrednictwem nazwanego potoku, jeśli oba znajdują się na tej samej maszynie lub przez TCP, jeśli są na różnych maszynach). Takie podejście umożliwia przetwarzanie rozproszone za pośrednictwem jednego hosta z wieloma aplikacjami danych.

Aplikacja danych jest dostarczana z metodami przechowywania danych, algorytmami symulacji itp. Za pośrednictwem jednej lub więcej wtyczek, dzięki czemu można łatwo dodawać nowe możliwości. Aby to zadziałało, plan polega na:

Pozwól aplikacji hosta przeprowadzić wyszukiwanie wtyczek. Host powinien przechowywać dane opisujące wtyczki i ich metadane, ale nigdy nie tworzy instancji żadnej z klas wtyczek. Aby zapobiec ładowaniu zespołów do aplikacji hosta, konieczne będzie przechowywanie opisów wtyczek w pewnym formacie serializowanym.Aplikacja zestawu danych zażąda informacji o wtyczkach od hosta, określi żądane wtyczki do załadowania, zażąda przesłania poprawnych zespołów (niezbędnych do przetwarzania rozproszonego) i załaduje wtyczki.Wybór poprawnych wtyczek powinien opierać się na typie (jak w System.Type) i dodatkowych informacjach, takich jak priorytet itp.

Myślę, że za to wszystko będę musiał:

Napisz jakiś katalog ładowania opóźnienia dla aplikacji danych (coś takiego jak DeploymentCatalog w Silverlight). Sztuką będzie prawdopodobnie zażądanie, aby zespół został przesłany i załadowany po tym, jak aplikacja określi, które klasy muszą zostać utworzone.Napisz własny mechanizm skanowania zespołu dla aplikacji hosta, która przechowuje informacje o wtyczkach w pewnym formacie serializowanym (string?), Aby zapobiec ładowaniu zespołów wtyczek do aplikacji hosta.Napisz jakiś mechanizm ładowania, który może wybrać poprawną klasę wtyczek i określić, jak ją załadować i jakie argumenty konstrukcyjne podać.Znajdź sposób, aby umożliwić wtyczkom określanie wartości ustawień (w tym wartości domyślnych i zlokalizowanych opisów wspomnianych wartości) oraz metadanych.

Chciałbym wykonać jak najmniej pracy, dlatego przyjrzałem się niektórym dostępnym systemom wtyczek dla .NET. Wygląda na to, że MEF wydaje się najbardziej obiecującym kandydatem. Przeczytałem o architekturze i możliwościach MEF, ale wciąż jestem trochę w ciemności, co do tego, gdzie powinienem skupiać swoją energię. Moje pytanie brzmi: które części MEF będą musiały zostać dostosowane, aby MEF działał z moim planowanym podejściem?

questionAnswers(1)

yourAnswerToTheQuestion