PRISM + MEF + MVVM - 不知道从哪里开始?

mic*_*ael 21 wpf mef module mvvm prism-4

我在用什么:

  • Visual Studio 2010
  • Microsoft .NET Framework 4
  • 棱镜v4

我想弄清楚的是如何在维护MVVM模式的同时开始使用Prism + MEF.当我进入Prism Quickstarts时,它有一个Prism + MEF,但项目中的注释明确指出Quickstart示例没有实现MVVM.我不确定要混合/匹配什么,以便我的shell本身遵循MVVM(和区域).

基本上,我想使用MEF能够在运行时加载程序集(模块).而且,我想在我的Shell中设置区域并让Shell使用MVVM(因此我可以将数据绑定到shell).网上的每个例子都是Prism,Prism + MVVM,Prism + Unity,Silverlight示例,Prism + MEF等.但我找不到任何WPF Prism + MEF + MVVM示例或信息.我真的不知道如何设置我的bootstrapping,以便开始.

一旦完成该部分,我确定我将弄清楚如何使用MVVM将其他控件加载到我的shell中.任何帮助都会很棒,特别是那些直接处理这种情况的资源就像是类似的东西(即Prism + Unity和没有MEF).谢谢!

Roe*_*elF 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>
Run Code Online (Sandbox Code Playgroud)

InitializationMode如果您需要运行时加载,则需要设置该值。该目录可以加载到 Prim 引导程序中:

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

然后加载模块所需要做的就是获取对IModuleManager(依赖注入,耶!)的引用并加载模块:

if (loadModule1)
    var myModule = moduleManager.LoadModule("Module1");
Run Code Online (Sandbox Code Playgroud)

现在该模块已为 Prism 所知。请记住,Prism 不支持卸载。