Какие части MEF следует настроить для динамической загрузки плагинов в распределенном приложении

Мое приложение для моделирования будет использовать плагины для обеспечения алгоритмов моделирования и структур данных для хранения данных моделирования. Приложение состоит из двух частей. Во-первых, это хост-приложение, которое предоставляет пользовательский интерфейс (либо как WPF-интерфейс, либо как плагин для приложения CAD). Это приложение обрабатывает все взаимодействия с пользователем, но не выполняет какие-либо расчеты моделирования и не сохраняет никаких данных моделирования. Вторая часть - приложение данных, которое выполняет расчеты моделирования. Приложение для обработки данных не имеет никакого способа для пользователя взаимодействовать с ним напрямую, весь ввод осуществляется через соединение с хостом (либо через именованный канал, если оба находятся на одной машине, либо через TCP, если они находятся на разных машинах). Этот подход позволяет распределенные вычисления через один хост с несколькими приложениями данных.

Приложение данных снабжено методами хранения данных, алгоритмами моделирования и т. Д. Через один или несколько плагинов, что позволяет легко добавлять новые возможности. Чтобы это работало, план должен:

Let the host application perform the search for plug-ins. The host should store data describing the plug-ins and their meta-data, but it will never instantiate any of the plug-in classes. In order to prevent loading the assemblies into the host application it will be necessary to store the descriptions of the plug-ins in some kind of serialized format. The dataset application will request plug-in information from the host, determine the desired plug-ins to load, request transfer of the correct assemblies (necessary for distributed computing) and load the plug-ins. Selection of the correct plug-ins should be based on Type (as in System.Type) and additional information, like priority etc.

Чтобы все это заработало, я думаю, что мне придется:

Write some kind of delay loading catalog for the data application (something like DeploymentCatalog in Silverlight). The trick will probably be to only request the assembly to be transferred and loaded after the application figures out which classes need to be instantiated. Write my own assembly scanning mechanism for the host application that stores the plug-in information in some serialized (string?) format to prevent the plug-in assemblies from being loaded into the host application. Write some kind of loading mechanism that can select the correct plug-in class and determine how to load it and which construction arguments to provide. Find some way to allow plug-ins to specify setting values (including default values and localized descriptions of said values) and meta-data.

Я хотел бы сделать как можно меньше работы, и поэтому я взглянул на некоторые из доступных плагинов для .NET. Судя по всему, MEF кажется наиболее перспективным кандидатом. Я прочитал об архитектуре и возможностях MEF, но я все еще немного в неведении относительно того, где я должен сосредоточить свою энергию. Итак, мой вопрос: какие части MEF нужно будет настроить, чтобы заставить MEF работать с моим запланированным подходом?

Ответы на вопрос(1)

Ваш ответ на вопрос