我正在使用的是什么:
我想弄清楚的是如何在维护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)。谢谢!
答案 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。