2017-04-20 47 views
-4

我正在WPF c#中开发一个软件。我的软件有多个窗口。我需要在多个窗口中共享同一个on对象实例(我使用的是旧代码,所以我不能让该对象为静态)。是否有一个很好的做法是让一个静态类具有需要在多个窗口中共享的变量,这样我就可以避免将它们传递给构造函数。谢谢跨多个Windows的共享变量的静态类

+0

'这是一个好习惯吗?不,但您可以使用依赖注入并在应用程序之间共享一个实例。那会更理想。为什么要避免通过构造函数传递 – Jonesopolis

+1

如果您遵循适当的MVVM模型,那么不同的窗口将共享相同的数据上下文,因此不需要静态方法 – MikeT

+0

所有窗口不一定共享相同的DataContext。这是否意味着您的所有窗口/视图都有一个巨型视图模型? – mm8

回答

1

你既可以使用静态类,也可以使用同一个单例实例注入所有窗口/视图模型。请注意,这不一定必须是实际实现单例设计模式的类,但需要确保使用相同的实例注入窗口/视图模型。

后一种方法是优先考虑的方法,主要是因为非静态共享类可以实现一个接口,使您可以轻松地用另一个接口替换实现,从而使单元测试您的类变得更容易。

因此,至少在一般情况下,使用全局静态类确实不是一个好习惯,但这可能仍然适用于您的特定场景。

+0

为什么使用单身,当你注射它呢?你也可以注入一个普通的类的实例,而不是单例。 (不是downvoter btw ...) – nvoigt

+0

然后,数据不会在窗口/视图模型之间共享,因为它们都有自己的实例... – mm8

+0

为什么会这样?您可以注入相同的实例,而不必靠近单例模式。 – nvoigt