复合WPF:全局变量?

时间:2009-09-01 14:09:37

标签: wpf prism

在复合WPF应用程序中,存储多个模块所需的全局变量的最佳方法是什么?例如,我正在开发一个应用程序,其中有几个模块需要获取文件名,因此他们可以从文件中获取所需的数据。

在Composite WPF应用程序中存储这样的信息是否有最佳实践?如何在保持松散耦合的同时将信息提供给模块?谢谢你的帮助

David Veeneman
远见系统

3 个答案:

答案 0 :(得分:1)

编写一个封装所需逻辑的服务,并将该服务打包到模块中。然后让您的其他模块使用该服务来完成他们的工作。请注意,该服务可能直接公开文件名,或者可能选择公开对基础文件进行操作的操作,而消费者不知道该文件。

答案 1 :(得分:1)

创建一个界面,负责返回“选定的文件名”。与大多数服务/依赖项不同,它不会进行大量处理 - 它只负责返回一个值。使用依赖注入为所有需要它的地方提供此服务的实现者。

目前这个文件名可能看起来真的是全球性的,但想象你的应用程序必须从SDI过渡到MDI。在复合应用程序中拥有真正的单身人士绝不是一个好主意。

答案 2 :(得分:0)

感谢两个答案,两者都看起来非常好。我在晨跑的时​​候想出了第三种方法,我想我会试试这个:

我在启动时加载了我的Composite WPF应用程序中的所有模块,并仅激活最初将显示的视图。因此,我的所有模块,甚至是未显示的模块,都会在启动完成后立即可用。

初始化时,需要文件路径的每个模块都将订阅Prism事件聚合器中的FileOpened复合事件。从命令行管理程序打开文件时,Shell视图模型将发布FileOpened组合事件。复合事件将文件路径作为其有效负载。

因此,当Shell视图模型发布FileOpened事件时,Prism事件聚合器将调用每个模块中的相应回调方法,并将filePath传递给每个模块的视图模型。