Как получить экземпляр модуля в PRISM - PullRequest
3 голосов
/ 25 октября 2011

У меня есть настольное приложение PRISM, которое загружает модули из каталога с помощью DirectoryModuleCatalog.

Все хорошо, за исключением того, что я не могу найти способ получить экземпляр загруженного модуля.IModuleManager и IModuleCatalog не имеют метода, подобного getInstance (ModuleInfo) или подобному.

См.

moduleManager.LoadModule(moduleInfo.ModuleName);

Эта строка правильно загружает модуль (модульManager имеет типIModuleManager), но что мне делать дальше, чтобы получить фактический экземпляр этого модуля?

Модули загружаются по требованию пользователя, поэтому я не могу зарегистрировать все модули при запуске в загрузчике.

1 Ответ

4 голосов
/ 29 октября 2011

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

Хотя вышеупомянутое сработает, вы не должны использовать этот подход вообще. Идея состоит в том, что классы модулей специфичны для конкретного модуля и должны использоваться только для целей инициализации модуля.

Я бы поместил метод Start каждого модуля в отдельный компонент (IStartable), зарегистрировал бы каждый компонент в контейнере с другим Id и разрешил / импортировал бы IEnumerable, чтобы получить все экземпляры, которые имеют метод start.

Надеюсь, это поможет

...