在我的WPF應用程序中,我使用MVVM模式和依賴注入。具有依賴注入的MVVM ViewModels中的陳舊數據
從數據庫準備數據的ViewModels將存儲庫注入構造函數。他們還使用構造函數中的存儲庫數據填充屬性。
ViewModel都是在ViewModelLocator類的靜態構造函數中創建的,ViewModelLocator類用來綁定到ViewModel。
這有以下缺點:
- 在視圖中的數據永遠不會更新,即使不關閉並重新打開它們時,因爲視圖模型實例始終是相同的。
- 打開第一個視圖後,所有的ViewModel都將被實例化,並且它們需要從數據庫中加載所需的數據。
我能想到的兩種方法來解決這些問題:
- 讓每視圖模型實現的是從數據庫中讀取數據並初始化屬性的方法 - 而不是在構造函數中這樣做。這需要每次打開視圖時調用該方法。這介紹了我不喜歡的temporal coupling。
- 以每次調用ViewModelLocator上相應屬性時創建請求的ViewModel的方式實現ViewModelLocator。我不喜歡這種方法,因爲我的組合根不會在程序啓動時執行,但會在程序實例的整個生命週期中傳播。
有沒有解決此問題的另一種方法?其他人如何解決這個問題?
謝謝你的回答。爲我的每個ViewModel設立一個工廠似乎有些過火,因爲工廠只能在一個地方使用,而且目前沒有必要。此外,除了container.Resolve之外,他們不會做任何其他事情。由於ViewModelLocator仍然是容器的唯一使用位置,所以我更喜歡在抽象工廠上調用'container.Resolve',因爲即使在這種情況下,容器也不會泄漏到應用程序代碼中。如果容器的配置不正確,我認爲抽象工廠的唯一優勢就是在啓動時會立即出現錯誤(續) – 2012-02-14 19:49:50
(續)。 – 2012-02-14 19:50:07