Подтвердить что ты не робот

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). Спасибо!

4b9b3361

Ответ 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.