Как ограничить prism 4 загрузкой только специальных подписанных модулей?

У меня есть настольное приложение WPF с использованием Prism 4, в моем загрузчике у меня есть следующий код:

protected override IModuleCatalog CreateModuleCatalog()
{
   var filepath = Assembly.GetExecutingAssembly().Location;
   var path = Path.GetDirectoryName(filepath);
   System.IO.Directory.SetCurrentDirectory(path);
   path = Path.Combine(path, "Modules");
   var moduleCatalog = new DirectoryModuleCatalog() { ModulePath = path };
   return moduleCatalog;
}

приведенный выше код говорит prism загрузить все .dll из пути «[my app root]\Modules» и проверить их, чтобы увидеть, реализован ли какой-либо класс IModule. Что я хочу сделать, так это ограничить процесс загрузки только библиотеками DLL, которые были подписаны с помощью определенного ключа знака, чтобы любой разработчик не мог внедрить свой модуль в мое приложение. пожалуйста, посоветуйте, если я иду по неправильному пути для такой проблемы.


person Ehsan Zargar Ershadi    schedule 16.01.2012    source источник


Ответы (2)


Вы на правильном пути, однако вам нужно пройти немного дальше. DirectoryModuleCatalog предназначен для загрузки любых типов в указанном каталоге, которые реализуют интерфейс IModule, как вы видели. Если вы хотите ограничить количество загружаемых модулей (например, сборками, подписанными с помощью определенного ключа), вам необходимо создать собственный каталог модулей (вероятно, полученный из DirectoryModuleCatalog) и переопределить метод Initialize. Initialize — это место, где каталог модулей проверит каталог и загрузит коллекцию объектов ModuleInfo, содержащих информацию о любых модулях в каталоге. Переопределяя этот метод, вы можете проверять сборки в каталоге и загружать модули только из сборок с надлежащей подписью. В методе Initialize вы должны заполнить свойство Modules информацией ModuleInfos о модулях, содержащихся в допустимых сборках.

Затем в приведенном выше коде вместо создания нового каталога DirectoryModuleCatalog() вы должны создать собственный каталог модулей.

Обратите внимание, что в зависимости от того, как вы проверяете подпись сборки, вы можете загрузить сборку в память (даже если вы не сделаете какие-либо модули доступными в каталоге). В этом случае вы можете захотеть проверить сборки в отдельном AppDomain, который затем можно будет выгрузить (таким образом выгружая неподписанные сборки из памяти).

person Brian S    schedule 19.06.2012

Я создал этот собственный каталог DirectoryModuleCatalog, где вы можете указать набор включения/исключения.

person Bek Raupov    schedule 24.10.2013