当前位置:  开发笔记 > 运维 > 正文

使用ModuleManager在Prism中加载模块

如何解决《使用ModuleManager在Prism中加载模块》经验,为你挑选了1个好方法。

这个问题也发布在Prism的Codeplex网站上.

我在按需加载模块时有点迷失,我希望你们能够启发我.我正在使用v2#7.

这就是我想要完成的事情:

1)我有2个区域 - 一个用于实例化模块的按钮(MenuRegion),另一个用于显示模块(MainRegion).在MenuRegion中一次只能看到一个模块.
2)模块可以在目录中找到
3)MenuModule模块与MenuRegion相关联,用于创建显示模块名称的按钮.单击其中一个按钮时,将加载相应的模块并显示在MainRegion中.
4)行为:
    a)单击ModuleA按钮并显示ModuleA.用户在ModuleA中输入数据,数据保持未保存状态.
    b)单击ModuleB按钮并显示ModuleB.用户在ModuleB中输入数据,数据保持未保存状态.
    c)单击ModuleA按钮,显示ModuleA,其中包含先前输入的信息.

如果我的假设错了,请纠正我,请给我其他建议:

1)MainRegion应该是ContentControl,因此一次只能看到一个模块.
2)我想我需要枚举我的目录的"GrouplessModules"来获取目录中可用模块的ModuleInfo
3)加载模块我认为我需要调用myModuleManager.LoadModule(moduleName)

最后,我的问题:

1)我应该在我的MenuModuleView的构造函数中将moduleManager作为参数吗?
2)如何从MenuModuleView内部访问目录,以便枚举可用的模块?
3)从MenuModuleView,我通过模块枚举,我创建按钮,将ModuleInfo分配给按钮的Tag属性.这样,我只有一个点击事件来加载模块.它是否正确?它闻起来有点像我的工作...

非常感谢你的帮助!!!



1> Kent Boogaar..:

1)我应该在我的MenuModuleView的构造函数中将moduleManager作为参数吗?

从技术上讲,你可以.实际上,如果你这样做,你仍然想要为你的视图定义一个默认构造函数.否则,您的视图将无法在设计人员中使用.因此,我建议使用属性将依赖项传递给UI组件.

2)如何从MenuModuleView内部访问目录,以便枚举可用的模块?

您将依赖于Prism的IModuleEnumerator接口,依赖注入将负责为您的视图提供模块枚举器.假设您在Unity容器中使用Prism,那将看起来像这样:

[Dependency]
public IModuleEnumerator ModuleEnumerator 
{
    get; set;
}

3)从MenuModuleView,我通过模块枚举,我创建按钮,将ModuleInfo分配给按钮的Tag属性.这样,我只有一个点击事件来加载模块.它是否正确?它闻起来有点像我的工作...

我建议你让每个按钮引发相同的WPF命令,而不是分配ModuleInfo给它ButtonCommandParameter属性.同样,Prism的基础设施可以帮助您在复合场景中干净利落地完成此任务.看DelegateCommand课.

作为最后一点,请注意,虽然您可能会懒得加载模块,但您将无法卸载它们.为此,你需要AppDomain隔离,这是另一个鱼的水壶.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有