Поможет ли PRISM? - PullRequest
       57

Поможет ли PRISM?

0 голосов
/ 08 сентября 2008

Я рассматриваю возможность создания приложения с использованием PRISM (Composite WPF Guidance / Library). Модули приложения будут разделены по вертикали (т.е. клиенты, поставщики, заказы на продажу и т. Д.). Это все еще относительно просто ... У меня также есть оболочка с основным регионом, где будет происходить вся работа, но теперь мне нужно следующее поведение: мне нужно меню в моей основной оболочке и при нажатии на каждый из параметров ( как клиенты, поставщики и т. д.) Мне нужно найти модуль и загрузить его в регион (только 1 просмотр за раз)?

Кто-нибудь знает примеры приложений с таким типом поведения? Все примеры больше ориентированы на загрузку всех модулей на основную оболочку? И должна ли моя строка меню быть модулем?

[ ОБНОВЛЕНИЕ ] Как внедрить модуль в регион на основе его выбора из меню? Все примеры показывают, что модуль вводит представление в регион при инициализации? Мне нужно только ввести вид, если модуль выбран в меню?

Ответы [ 5 ]

4 голосов
/ 19 мая 2009

Да, 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.

3 голосов
/ 08 октября 2008

Только что закончил смотреть Брайан Нойес на Призме на dnrTV. Это ответило на все мои вопросы ...

0 голосов
/ 23 июля 2010

, чтобы сэкономить ваше время, отметьте Статья Джона Папы "Framework для презентаций" . Будет проще, если у вас есть 3-й объект (Screen Conductor) для управления экранами при отображении или скрытии от регионов.

0 голосов
/ 04 октября 2008

Ваш основной регион может быть ContentControl, так что одновременно будет активным только 1 просмотр. Вы также можете загрузить свои модули «По требованию». Существует быстрый старт, который показывает вам, как это сделать. Следует также иметь в виду, что, если модуль уже был инициализирован один раз, его повторная инициализация не будет выполнять метод Initialize () для модуля. Может быть полезно, что при нажатии на меню это будет загружать модуль по требованию (который еще не загрузит представление), а затем вы можете запустить событие через EventAggregator, чтобы модуль теперь мог добавить представление (использовать подход не добавлять вид дважды) и активировать вид (что обеспечит просмотр вида в регионе).

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

0 голосов
/ 08 сентября 2008

Непонятно, что вы имеете в виду, говоря «найдите модуль и загрузите его в регион». Вы можете загрузить вид модуля и добавить его в оболочку. Блок приложения Composite UI и CompositeWPF строятся поверх шаблона IoC. Это означает, что ваши модули должны вставлять свои пункты меню в полосу меню оболочки или подписываться на события, генерируемые оболочкой.

...