Да, PRISM поможет вам здесь.
Здесь стоит упомянуть ряд вещей.
RE: Призма мне подходит?
Вы можете загрузить модуль по требованию. PRISM имеет возможность загрузки модуля в RunTime, так что в вашем случае, если вы загрузите указанное решение, используя Shell и ModuleA. Затем ваш пользователь запускает событие (т. Е. Выбор из меню), после чего он может позволить вам динамически загружать ModuleB и затем вводить его в игру. Чтобы быть ясным, вам действительно нужно сесть и сделать свою домашнюю работу здесь, поскольку вы должны убедиться, что ModuleB не имеет своих собственных зависимостей от других модулей и т. Д. (Как правило, разумно использовать модуль инфраструктуры. Я использовал методы где у меня есть манифест модулей, которые я ищу в XML, в котором перечислены его абсолютные зависимости, а затем я проверяю, что сначала они загружаются, а затем загружаю ModuleB).
См. Загрузка модулей по требованию через справочные документы PRISM (Деятельность по разработке). Также ищите Подготовьте модуль для удаленной загрузки
RE: внедрение представления во время выполнения
Инъекция вида в регион через меню - это простой случай доступа к IRegionManager и его добавления. Чтобы сделать это, убедитесь, что в вашем Конструкторе для указанной ViewModel / Presenter / Controller вы используете put:
MyConstructor(IRegionManager regionManager, IUnityContainer container)
Как и в случае с PRISM, вы можете в значительной степени добавить любой объект, который хотите, в свою конструкцию, и PRISM обеспечит его прибытие туда вовремя и в рамках бюджета (хе-хе).
Оттуда это обычный подход, который вы бы использовали, добавив представление ... например:
IMyViewInstance myViewInstance = this.container.Resolve<IMyViewInstance>();
IRegion myRegion = this.regionManager.Regions["YourRegion"];
myRegion.add(myViewInstance);
myRegion.Active(myViewInstance);
И все должно собраться вместе! :)
Примечание:
- Убедитесь, что вы задали локальную ссылку на контейнер и regionManager в Construct (this.container = container и т. Д.).
- Если вы не уверены, где существуют вышеуказанные пространства имен, щелкните правой кнопкой мыши IUnityContainer, например, и позвольте Visual Studio РАЗРЕШИТЬ его (меню правой кнопки мыши)
- Поместите логику «Добавить» в свое событие в меню или используйте центральный метод - в зависимости от того, что унесет волосы назад:)
Скотт Барнс - менеджер по продуктам Rich Platforms - Microsoft.