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). Спасибо!
Ответы
Ответ 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
- это то, что вы хотите установить, если вам нужна загрузка во время выполнения. Каталог можно загрузить в загрузочный загрузчик Prim:
catalog = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("Modules.xaml", UriKind.RelativeOrAbsolute));
Затем все, что вам нужно сделать, чтобы загрузить ваш модуль, получает ссылку на IModuleManager
(Dependency Injection, yay!) и загружает модуль:
if (loadModule1)
var myModule = moduleManager.LoadModule("Module1");
Теперь модуль известен Prism. Имейте в виду, что разгрузка не поддерживается Prism.
Ответ 2
Все, что вы попросили, похоже, присутствует на образцах, которые установлены с Prism, вы просто смотрели на неправильные.
Откроется папка StockTrader RI, которая описана здесь.
Он имеет довольно полную выборку для реальных приложений с некоторыми сложными сценариями и реализуется с помощью Prism (очевидно), MVVM и MEF.
Изменить: Несмотря на то, что ссылка, которую я предоставил, предназначена для Prism 5, образец также присутствовал на Prism 4.1. В этой версии документация не была доступна в Интернете (по крайней мере, насколько я помню), но вместо этого предлагалась в файле .chm, установленном с исходным кодом + Prism + samples. Однако не знаю о версии 4.0.