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

时间:2011-02-09 16:39:24

标签: wpf mvvm module mef prism-4

我正在使用的是什么:

  • Visual Studio 2010
  • Microsoft .NET Framework 4
  • Prism 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示例或信息。我真的不知道如何设置我的自举,以及如何开始。

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

2 个答案:

答案 0 :(得分:1)

我自己从未使用Prism + MEF,但在你的问题中,你提到你希望能够在运行时加载模块(使用MEF)。这是你不需要MEF的东西,因为Prism很擅长这样做。设置非常简单:

首先,通过实施Modularity.IModule创建一个Prism模块。它只需要一种方法: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(依赖注入,yay!)的引用并加载模块:

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

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

答案 1 :(得分:1)

你问过的所有东西似乎都出现在安装了Prism的样品上,你只是看错了。

查看 StockTrader RI 文件夹,即described here

它有一个相当完整的实际应用程序示例,包含一些复杂的场景,并使用Prism(显然),MVVM和MEF实现。

编辑尽管我提供的链接是针对Prism 5的,但样本也出现在Prism 4.1上。在该版本中,文档无法在线获取(至少据我记得),而是在安装了Prism源代码+样本的.chm文件中提供。但是,不知道v4.0。