Как ограничить призму 4 для загрузки только специальных подписанных модулей?
У меня есть приложение WPF Desktop, использующее 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;
}
Приведенный выше код говорит призме загрузить все DLL-файлы из пути "[my app root] \ Modules" и проверить их на предмет наличия в IModule какого-либо класса. Что я хочу сделать, так это ограничить процесс загрузки только теми DLL, которые были подписаны определенным ключом подписи, чтобы любой разработчик не смог внедрить его модуль в мое приложение. пожалуйста, совет, если я иду по неправильному пути для такой проблемы.
2 ответа
Вы на правильном пути, однако вам нужно пойти немного дальше. DirectoryModuleCatalog предназначен для загрузки любых типов в указанном каталоге, которые реализуют интерфейс IModule, как вы видели. Если вы хотите ограничить модули, которые загружаются дальше (например, сборками, подписанными определенным ключом), вам нужно создать собственный каталог модулей (вероятно, производный от DirectoryModuleCatalog) и переопределить метод Initialize. Инициализация - это то, где каталог модулей изучит каталог и загрузит коллекцию объектов ModuleInfo, которые содержат информацию о любых модулях в каталоге. Переопределив этот метод, вы можете исследовать сборки в каталоге и загружать модули только из сборок с правильной подписью. В методе Initialize вы должны заполнить свойство Modules модульной информацией о модулях, содержащихся в допустимых сборках.
Затем в приведенном выше коде вместо создания нового DirectoryModuleCatalog() вы создадите свой собственный каталог модулей.
Обратите внимание, что в зависимости от того, как вы проверяете подпись сборки, вы можете загружать сборку в память (даже если вы не делаете никаких модулей доступными в каталоге). В этом случае вы можете проверить сборки в отдельном домене приложений, который затем можно выгрузить (следовательно, выгрузить неподписанные сборки из памяти).
Я создал этот пользовательский DirectoryModuleCatalog, где вы можете указать набор incluson/exclusion.