2017-04-20 49 views
-4

我正在WPF c#中開發一個軟件。我的軟件有多個窗口。我需要在多個窗口中共享同一個on對象實例(我使用的是舊代碼,所以我不能讓該對象爲靜態)。是否有一個很好的做法是讓一個靜態類具有需要在多個窗口中共享的變量,這樣我就可以避免將它們傳遞給構造函數。謝謝跨多個Windows的共享變量的靜態類

+0

'這是一個好習慣嗎?不,但您可以使用依賴注入並在應用程序之間共享一個實例。那會更理想。爲什麼要避免通過構造函數傳遞 – Jonesopolis

+1

如果您遵循適當的MVVM模型,那麼不同的窗口將共享相同的數據上下文,因此不需要靜態方法 – MikeT

+0

所有窗口不一定共享相同的DataContext。這是否意味着您的所有窗口/視圖都有一個巨型視圖模型? – mm8

回答

1

你既可以使用靜態類,也可以使用同一個單例實例注入所有窗口/視圖模型。請注意,這不一定必須是實際實現單例設計模式的類,但需要確保使用相同的實例注入窗口/視圖模型。

後一種方法是優先考慮的方法,主要是因爲非靜態共享類可以實現一個接口,使您可以輕鬆地用另一個接口替換實現,從而使單元測試您的類變得更容易。

因此,至少在一般情況下,使用全局靜態類確實不是一個好習慣,但這可能仍然適用於您的特定場景。

+0

爲什麼使用單身,當你注射它呢?你也可以注入一個普通的類的實例,而不是單例。 (不是downvoter btw ...) – nvoigt

+0

然後,數據不會在窗口/視圖模型之間共享,因爲它們都有自己的實例... – mm8

+0

爲什麼會這樣?您可以注入相同的實例,而不必靠近單例模式。 – nvoigt