mic*_*ael 21 wpf mef module mvvm prism-4
我在用什么:
我想弄清楚的是如何在维护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).谢谢!
我自己从未使用过 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 不支持卸载。
| 归档时间: |
|
| 查看次数: |
8962 次 |
| 最近记录: |