Как ограничить призму 4 для загрузки только специальных подписанных модулей? - PullRequest
6 голосов
/ 17 января 2012

У меня есть приложение 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 из "[root моего приложения]\ Модули "путь и проверьте их, чтобы увидеть, если какой-либо класс реализовал IModule.Я хочу ограничить процесс загрузки только теми библиотеками DLL, которые были подписаны специальным ключом подписи, чтобы любой разработчик не смог внедрить этот модуль в мое приложение.пожалуйста, совет, если я иду по неправильному пути для такой проблемы.

Ответы [ 2 ]

2 голосов
/ 19 июня 2012

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

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

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

0 голосов
/ 24 октября 2013

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

...