21

我正在使用什么:

  • 视觉工作室 2010
  • 微软 .NET 框架 4
  • 棱镜 v4

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

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

一旦这部分完成,我相信我会弄清楚如何使用 MVVM 将其他控件加载到我的 shell 中。任何帮助都会很好,尤其是直接处理这种情况的资源,与类似的东西相对(即 Prism + Unity 和没有 MEF)。谢谢!

4

2 回答 2

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(依赖注入,耶!)并加载模块:

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

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

于 2015-04-13T07:28:54.893 回答
1

您询问的所有内容似乎都出现在 Prism 随附的示例中,您只是查看了错误的示例。

查看此处描述的StockTrader RI文件夹。

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

编辑:即使我提供的链接是针对 Prism 5 的,该示例也存在于 Prism 4.1 上。在那个版本中,文档在网上不可用(至少据我记得),而是在安装了 Prism 源代码 + 示例的 .chm 文件中提供。不过,不知道v4.0。

于 2015-05-18T20:29:54.557 回答