Prism:在创建shell后将模块加载到目录中

4
无论是使用Unity还是MEF,你都可以在引导程序创建目录之后加载模块吗?换句话说,有一个按钮单击可以加载一个在应用程序启动时未知的模块,并且引导程序CreateModuleCatalog代码已执行?我在文档或互联网搜索中都没有找到好的例子。要么它不支持此功能,要么我错过了什么。我找到的所有内容都只在bootstrapper中加载模块。
我尝试进行概念验证的基本WPF项目如下: 1. 加载应用程序。它将加载一些标准模块。Shell将被创建并可见。 2. 用户交互将触发需要发现新模块,将其添加到目录并在UI上公开的需要。我关心的不是它如何发现模块,而是如何加载它们。发现很可能是查询数据库、下载所需的.dll文件,然后保存到已知目录。
我有一种感觉,这相对简单,我只是一直在努力弄清楚其中的细节。
2个回答

3
请看Prism 4.0快速入门 - MEF的模块化与Silverlight。
此快速入门从XAML创建目录,但您也可以手动添加条目到模块目录并传递类似参数。 模块信息类所需的唯一内容是指向XAP文件的REF。
您还可以查看桌面版本。 它会在目录中查找包含模块的DLL,然后从磁盘加载它们。 您可以通过指向某个文件位置上的已知DLL来执行相同操作。
基本上,如果将正确的模块信息添加到ModuleCatalog中,并要求加载模块,则DLL将被下载或加载,并且MEF / Unity容器将初始化该模块。

2
我已经仔细查看了这些示例,但它们似乎都在引导程序的应用程序启动期间加载模块。实际上,我的意思是识别模块,而不一定是加载它们。我想在应用程序启动后和引导程序代码执行后识别模块。换句话说,当使用模块目录时,我不知道模块是什么,也无法弄清楚如何或是否可以稍后识别它们。 - user638750

1

我对Prism还很陌生,之前也遇到了类似的问题。经过长时间的搜索,我没有找到直接的帮助。不过,我用另一种方式解决了这个问题。以下是我的代码:

在 ViewModel 类(MasterViewModel)中创建了一个 DelegateCommand 属性,并在事件处理程序代码中添加并加载了新模块到 Modulecatalog 中。
将其钩在 View 的 XAML 上的按钮的 Click 事件上
使用依赖注入获取 ModuleCatalog 和 ModuleManager 的引用。
在单击事件代码中,我通过代码(即 Module2)向 ModuleCatalog 添加了一个模块,并使用 Module Manager 加载它。

这种技术可以在初始 Shell 初始化后用于加载模块。我必须承认,杰夫的答案有点不相关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接