Загрузка и выгрузка плагинов MEF во время выполнения программы - PullRequest
1 голос
/ 04 января 2012

У нас есть приложение, которое имеет функциональность, которая может быть реализована несколькими различными способами. У нас есть стандартизированный интерфейс (скажем, IWorker), который моделирует требуемую функциональность. У нас есть несколько модулей, каждый из которых имеет собственную реализацию IWorker, которая решает необходимые задачи совершенно по-разному. В настоящее время, в зависимости от того, какая версия приложения необходима, мы поставляем конкретную DLL, содержащую соответствующий модуль, и все в порядке. Однако теперь мы хотим поддержать сценарий, в котором пользователь может изменять модули во время выполнения на основе изменяющихся условий (то есть сетевое соединение потеряно, поэтому мы хотим теперь использовать модуль IFileWorker вместо модуля INetworkWorker). Как мы можем выгрузить модуль и загрузить другой во время выполнения?

1 Ответ

2 голосов
/ 04 января 2012

вместо загрузки и выгрузки ваших модулей вы можете пойти простым путем и создать класс IWorkerController (экспортный общий доступ), который имеет коллекцию всех модулей IWorker, загружаемых через MEF. поэтому, если вы хотите использовать функциональность IWorker - просто спросите свой IWorkerController (возможно, по умолчанию используется INetworkWorker). Вы можете просто переключиться на нужного вам работника, сказав своему IWorkerControll сделать это.

поэтому вместо того, чтобы использовать IWorker во всех своих службах, вы теперь пользуетесь IWorkerController.

...