2011-02-09 2 views
21

Что я использую:PRISM + MEF + MVVM - Не знаете, где начать?

  • Visual Studio 2010
  • Microsoft .NET Framework 4
  • Prism v4

То, что я пытаюсь выяснить, как начать работу с Prism + MEF при сохранении шаблона MVVM. Когда я вхожу в Prism Quickstarts, у него есть Prism + MEF, но комментарии в проекте конкретно указывают, что пример Quickstart не реализует MVVM. Я не совсем уверен, что нужно смешивать/сопоставлять, чтобы сама оболочка следовала за MVVM (и регионами).

В принципе, я хочу использовать MEF для загрузки сборок (модулей) во время выполнения. И я хочу настроить регионы в своей оболочке и использовать Shell MVVM (чтобы я мог привязывать файлы к оболочке). Каждый пример онлайн - это Prism, Prism + MVVM, Prism + Unity, примеры Silverlight, Prism + MEF и т. Д. Но я не могу найти примеры или информацию WPF Prism + MEF + MVVM. Я действительно понятия не имею, как настроить загрузку и что-то подобное.

Как только эта часть будет завершена, я уверен, что я выясню, как загрузить другие элементы управления с помощью MVVM в свою оболочку. Любая помощь будет велика, особенно ресурсы, которые напрямую касаются этой ситуации, как нечто похожее на нечто подобное (т. Е. Prism + Unity и без MEF). Благодаря!

+0

Вы когда-нибудь находили пример MEF + Prism + MVVM? Я тоже не могу найти его, и пример стоит тысячи ссылок на файлы справки. – JohnC

+0

@JohnC: Ну, Руководство разработчика для Prism было полезно, но нет, я не нашел конкретных примеров Prism + MEF + MVVM. Хотя, глядя на каждый компонент в отдельности, все было более ощутимо. Prism - это платформа, которая предлагает утилиты и классы, которые помогут вам написать приложение MVVM. MEF - это плагин. Причина, по которой Prism и MEF могут переплетаться, заключается в том, что Призма является расширяемой. Я не понял, как обращаться с регионами (используя MEF), но я обнаружил, что AggregateCatalog - это сердце и душа Prism + MEF. – michael

+0

@JohnC: MVVM - это стиль дизайна, и он, естественно, идет с Prism. Дело в том, что Prism предоставляет довольно много инструментов для обработки особых ситуаций MVVM (например, он предоставляет DelagateCommand и содержит примеры создания CompositeCommand). Он предлагает регионы (которые я до сих пор не понял полностью). Он предлагает такие классы, как NotificationObject и т. Д. Я нашел способы использовать MEF для импорта моего ViewModel в мое представление и экспорта моего представления в мой загрузочный файл. Существует немало источников, просто не один пример BIG, а не множество небольших примеров, которые я собрал вместе. – michael

ответ

1

Я никогда не использовал Prism + MEF самостоятельно, но в вашем вопросе вы упомянули, что хотите загружать модули во время выполнения (с помощью MEF). Для этого вам не нужно иметь MEF, потому что Prism неплохо справляется с этим. Настройка довольно проста:

Сначала создайте модуль Prism, выполнив Modularity.IModule. Это требует только одного метода: Initialize(). Здесь вы можете выполнить любую настройку, необходимую для вашего модуля. Я обычно также расширяю конструктор для ввода любых других интерфейсов, которые могут понадобиться (используя Unity).

Затем создайте ModuleCatalog, чтобы уточнить детали модуля, созданного:

<Modularity:ModuleCatalog 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism.Composition"> 
    <Modularity:ModuleInfo Ref="Your.ModuleProject.dll" 
     ModuleType="Your.ModuleProject.Module, Your.ModuleProject" 
     ModuleName="Module1" 
     InitializationMode="OnDemand" /> 
</Modularity> 

InitializationMode является то, что вы хотите установить, если вам нужно во время выполнения загрузки. Каталог может быть загружен в Приме загрузчике:

catalog = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("Modules.xaml", UriKind.RelativeOrAbsolute)); 

Тогда все, что вам нужно сделать, чтобы загрузить ваш модуль, это получить ссылку на IModuleManager и загрузить модуль (Dependency Injection, яй!):

if (loadModule1) 
    var myModule = moduleManager.LoadModule("Module1"); 

Теперь модуль известен Prism. Имейте в виду, что разгрузка не поддерживается Prism.

1

Все, что вы попросили, похоже, присутствует на образцах, которые установлены с Призмами, вы просто посмотрели на неправильные.

Проверьте StockTrader RI папка, то есть described here.

Он имеет довольно полную выборку для реальных приложений с некоторыми сложными сценариями и реализуется с помощью Призма (очевидно), MVVM и MEF.

Редактировать: Несмотря на то, что ссылка, предоставленная мной для Prism 5, образец также присутствовал на Prism 4.1. В этой версии документация не была доступна в Интернете (по крайней мере, насколько я помню), но вместо этого предлагалась в файле .chm, установленном с исходным кодом + Prism + samples. Однако не знаю о версии 4.0.

Смежные вопросы