代码之家  ›  专栏  ›  技术社区  ›  David Veeneman

复合WPF:全局变量?

  •  0
  • David Veeneman  · 技术社区  · 15 年前

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

    在复合WPF应用程序中存储这样的信息是否有最佳实践?在仍然保持松耦合的情况下,如何向模块获取信息?谢谢你的帮助

    戴维维尔宁
    远视系统

    3 回复  |  直到 13 年前
        1
  •  1
  •   Tim Cooper    13 年前

    编写一个封装所需逻辑的服务,并将该服务打包到模块中。然后让其他模块使用该服务来完成它们的工作。请注意,服务可能会直接公开文件名,或者选择公开在底层文件上操作的操作,而不让使用者知道所述文件。

        2
  •  1
  •   Rob Fonseca-Ensor    15 年前

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

    目前,这个文件名似乎是真正的全局性的,但是想象一下你的应用程序必须从SDI转换到MDI。在复合应用程序中使用真正的单件并不是一个好主意。

        3
  •  0
  •   David Veeneman    15 年前

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

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

    初始化后,需要文件路径的每个模块都将订阅prism事件聚合器中的fileopened复合事件。当从shell打开文件时,shell视图模型将发布一个file opened复合事件。复合事件将把文件路径作为其有效负载。

    因此,当shell视图模型发布fileopened事件时,prism事件聚合器将调用每个模块中适当的回调方法,并将文件路径传递给每个模块的视图模型。