2016-05-07 7 views
0

Я написал простой класс менеджера плагинов с MEF и FileSystemWatcher для автоматического обновления плагинов, но я слышал, что некоторые говорят, что можно добавлять и удалять сборки (плагины) на мы также должны использовать AppDomain.Почему AppDomain имеет отношение к менеджеру плагина, реализованному с помощью MEF

Может ли кто-нибудь мне посоветовать, когда нам нужно использовать AppDomain и MEF вместе (особенно для моего сценария менеджера плагинов)?

Какая связь между ними?

ответ

0

Короче говоря, AppDomain требуется, если вы хотите перезаписать DLL, которые используются приложением, и что AppDomain должен указать ShadowCopyFiles = "true".

Теневое копирование файлов означает, что AppDomain скопирует DLL-файлы во временный каталог и загрузит их из этого временного каталога, чтобы исходные DLL-файлы могли быть перезаписаны.

К сожалению, сборки, загруженные в любой AppDomain, не могут быть выгружены, если только AppDomain, который их содержит, выгружается.

Учитывая это, обновление плагина затруднено, потому что вам нужно будет A) разгрузить весь AppDomain, который обязательно выгружает все другие DLL в этом AppDomain или B) позволяет использовать новую версию той же DLL. загружаемое увеличение объема памяти вашего приложения. Второй вариант также требует, чтобы ваш плагин .dlls был сильным именованным и другим номером версии, чтобы MEF распознал разницу и загрузил новую .dll.