在复合WPF应用程序中,存储多个模块所需的全局变量的最佳方法是什么?例如,我正在开发一个应用程序,其中有几个模块需要获取文件名,因此他们可以从文件中获取所需的数据。
在Composite WPF应用程序中存储这样的信息是否有最佳实践?如何在保持松散耦合的同时将信息提供给模块?谢谢你的帮助
David Veeneman
远见系统
答案 0 :(得分:1)
编写一个封装所需逻辑的服务,并将该服务打包到模块中。然后让您的其他模块使用该服务来完成他们的工作。请注意,该服务可能直接公开文件名,或者可能选择公开对基础文件进行操作的操作,而消费者不知道该文件。
答案 1 :(得分:1)
创建一个界面,负责返回“选定的文件名”。与大多数服务/依赖项不同,它不会进行大量处理 - 它只负责返回一个值。使用依赖注入为所有需要它的地方提供此服务的实现者。
目前这个文件名可能看起来真的是全球性的,但想象你的应用程序必须从SDI过渡到MDI。在复合应用程序中拥有真正的单身人士绝不是一个好主意。
答案 2 :(得分:0)
感谢两个答案,两者都看起来非常好。我在晨跑的时候想出了第三种方法,我想我会试试这个:
我在启动时加载了我的Composite WPF应用程序中的所有模块,并仅激活最初将显示的视图。因此,我的所有模块,甚至是未显示的模块,都会在启动完成后立即可用。
初始化时,需要文件路径的每个模块都将订阅Prism事件聚合器中的FileOpened复合事件。从命令行管理程序打开文件时,Shell视图模型将发布FileOpened组合事件。复合事件将文件路径作为其有效负载。
因此,当Shell视图模型发布FileOpened事件时,Prism事件聚合器将调用每个模块中的相应回调方法,并将filePath传递给每个模块的视图模型。