wpf - 当 app.config 中的其他模块设置为 Startup 时自动加载 OnDemand prism 模块
问题描述
我们将 Prism 7 与统一用于 WPF 应用程序。有一组 prism 模块依赖于其他模块。我希望能够通过 app.config 进行所有配置,以避免在打开和关闭功能时重新编译。所以,假设我们有以下三个模块:
<configSections>
<section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf" />
</configSections>
<appSettings>
....
</appSettings>
<modules>
<!--SOME KIND OF CONNECTION MODULE-->
<module
moduleName="IConnectionsModule"
assemblyFile="Connections.Module.dll"
moduleType="Connections.Module.ConnectionsModule, Connections.Module"
startupLoaded="true"
/>
<!--SOME KIND OF MIDDLE MODULE-->
<module
moduleName="IMiddlewareModule"
assemblyFile="Middleware.Module.dll"
moduleType="Middleware.Module.MiddlewareModule, Middleware.Module"
startupLoaded="false"
>
<dependencies>
<dependency moduleName="IConnectionsModule"/>
</dependencies>
</module>
<!--SOME KIND OF TOP-LEVEL MODULE-->
<module
moduleName="IToplevelModule"
assemblyFile="Toplevel.Module.dll"
moduleType="Toplevel.Module.ToplevelModule, Toplevel.Module"
startupLoaded="true"
>
<dependencies>
<dependency moduleName="IMiddlewareModule"/>
</dependencies>
</module>
</modules>
Connection 模块将始终被加载。Middle 依赖于 Connection 模块并且设置为 hasstartupLoaded="false"
所以它的 Initialization Mode 将被设置为OnDemand
。Top Level 模块依赖于 Middle 模块并设置为,startupLoaded="true"
因此其初始化模式为WhenAvailable
. 这种解释可以在ConfigurationModuleCatalog.desktop.cs
:
ModuleInfo moduleInfo = new ModuleInfo(element.ModuleName, element.ModuleType)
{
Ref = GetFileAbsoluteUri(element.AssemblyFile),
InitializationMode = element.StartupLoaded ? InitializationMode.WhenAvailable : InitializationMode.OnDemand
};
我的期望是,即使启动时未加载 Middle 模块,Prism 也会识别出需要,因为 Toplevel 模块已加载,因此会自动启动它。但相反,它会引发错误:
Module IToplevelModule is marked for automatic initialization when the application starts, but it depends on modules that are marked as OnDemand initialization. To fix this error, mark the dependency modules for InitializationMode=WhenAvailable, or remove this validation by extending the ModuleCatalog class.
所以,我的问题是:这可以做到吗?显然,简单的解决方法是将两者都设置为真或都设置为假。但我希望通过一些智能来避免一点操作员错误。我正在阅读文档,它提到了一个模块组,但我没有看到如何在配置文件中创建它。
最坏的情况,我想我可以扩展课程,但希望有办法避免这种情况。
解决方案
推荐阅读
- azure - 如何从 WebPart 获取 Sharepoint 的访问令牌?
- gulp - Babel 导出聚合时抛出类型错误
- python - 对多个熊猫数据框执行相同操作的正确方法是什么?
- perl - 每行的水平绝对值
- java - Java Scanner.nextLine() 错误地将 unicode (emoji) 解析为新行
- python-3.x - 从字符串中删除多个相似词 - Python
- excel - 从多个 excel 文件中读取数据并在另一个 excel 中使用它进行一些计算
- gatling - 我想从场景中获取值并在 QueryParam 中设置值
- python - 是否可以从 njit 函数发送 QT 信号?
- css - Yii2中如何引用bootstrap.css?