复合WPF:全局变量?

复合WPF:全局变量?,wpf,prism,Wpf,Prism,在复合WPF应用程序中,存储多个模块所需的全局变量的最佳方式是什么?例如,我正在开发一个应用程序,其中几个模块需要获得一个文件名,以便能够从文件中获取所需的数据 在复合WPF应用程序中存储这样的信息是否有最佳实践?如何在保持松散耦合的同时将信息传送到模块?谢谢你的帮助 大卫·维内曼 Foresight Systems编写一个服务,封装您所需的逻辑,并将该服务打包到一个模块中。然后让其他模块使用该服务完成工作。请注意,服务可以直接公开文件名,也可以选择公开在用户不知道所述文件的情况下对底层文件进行

在复合WPF应用程序中,存储多个模块所需的全局变量的最佳方式是什么?例如,我正在开发一个应用程序,其中几个模块需要获得一个文件名,以便能够从文件中获取所需的数据

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

大卫·维内曼

Foresight Systems

编写一个服务,封装您所需的逻辑,并将该服务打包到一个模块中。然后让其他模块使用该服务完成工作。请注意,服务可以直接公开文件名,也可以选择公开在用户不知道所述文件的情况下对底层文件进行操作的操作。

创建一个接口,该接口负责返回“所选文件名”。与大多数服务/依赖项不同,它不会做很多处理——它只负责返回一个值。使用依赖项注入将此服务的实现者提供给所有需要它的地方


目前,这个文件名可能看起来确实是全局的,但想象一下,您的应用程序必须从SDI转换到MDI。在你的复合应用程序中有真正的单身从来都不是一个好主意。

谢谢你的两个答案,这两个答案看起来都很好。我在晨跑时想出了第三种方法,我想我要试试这个:

我在启动时加载复合WPF应用程序中的所有模块,并仅激活最初显示的视图。因此,我的所有模块,甚至没有显示的模块,都可以在启动完成后立即使用

初始化后,需要文件路径的每个模块都将订阅Prism事件聚合器中的FileOpen复合事件。从Shell打开文件时,Shell视图模型将发布FileOpened复合事件。复合事件将携带文件路径作为其有效负载


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

对于Singleton和MDI,您可以拥有一个打开“single”文件和MDI接口的应用程序。Visual Studio解决方案是MDI环境中的单个文件。