【发布时间】:2017-04-10 12:44:34
【问题描述】:
我们有一个使用 C#/WPF/Prism 构建的相当大的应用程序。该应用程序有几个静态模块和未知数量的动态加载模块。
我的影响领域是静态模块和外壳。
我被要求实现一个重新启动 shell 的功能,但只有在查询所有当前打开的模块是否允许重新启动之后。如果至少有一个模块表示不允许(例如:仍未保存的更改),则推迟重启。
现在外壳和模块通过EventAggregator 进行通信。这意味着我可以发布一个事件,然后查看是否有任何订阅者拒绝或允许重新启动。
这适用于我可以更改的所有模块。但是,我无法更改动态模块(不同的团队,不同的源代码管理)。
一个要求是,如果任何模块不支持此新功能,则应将其视为拒绝重新启动。
显而易见的问题是,我如何才能发现有人没有订阅该活动?
尽管所有视图模型都实现了我们的IViewModel 接口,但我看不出有多少视图模型当前存在(因此我至少可以查看是否所有视图模型都允许,或者是否缺少某些答案)。
我可能会发现,有多少 模块 支持它,但即便如此,这也没有说明视图当前打开/存在/使用了多少视图模型。
有没有办法在不更改所述视图模型的情况下确定活动视图模型是否不支持此功能?
【问题讨论】:
-
当 prism 加载模块时,您在 shell 中 could update some counter 以跟踪加载的模块数量。您还应该有许多接受或拒绝重新启动的模块。将它们加起来应该等于您拥有的计数器变量。我错过了什么吗?
-
@3615 这是我目前的解决方法,拥有一个模块可以拥有的属性,这样我就可以找出有多少 modules 不支持它。但是一个模块可能有多个视图和多个视图模型,所以有 X 个模块,我还不如得到 X-Y 甚至 X+Y 回复......如果是 X+Y 我仍然不知道是否有视图和视图模型漂浮在那个周围没有回答:(
-
此外,如果我可以忽略一个不支持它的模块,如果它没有打开的视图/视图模型,那就太好了。
标签: c# wpf prism eventaggregator