2012-09-24 44 views
2

每個應用程序都包含一些可配置的設置。這些設置可以或多或少地分爲兩類:MVVM架構中的App.Config

  1. 應用程序的外觀:例如可以是窗口位置,窗口大小,在視圖等
  2. 業務規則的默認選項:這些設置將業務邏輯使用。

在我實現的架構中,View有自己的項目(WPF),ViewModel有自己的項目(類庫)。從理論上講,View應該負責加載/保存視圖相關的設置,並且ViewModel應該負責加載/保存業務設置。

查看設置很容易處理。在設置(app.config)中創建所需的屬性,並且它很容易加載保存。

但是,ViewModel無法通過可在View項目中使用的內置機制訪問app.config設置。

我的第一個想法是做一些幫助方法,這將允許我從ViewModel讀取/寫入app.config中的設置。你有什麼意見?我是否在這裏複雜的東西,或者這是處理應用程序設置的可接受的方式?

回答

1

有三種方法可以到這裏。

  1. 增加提及System.Configuration.dll,讓您的視圖模型項目中使用ConfigurationManager正常。

  2. 有視圖模型項目要求它通過構造函數或依賴倒置的其他方法所需要的配置信息,並具有查看項目通過它。

  3. 把的ViewModels和視圖在主應用程序項目。

就個人而言,我會去選項3,除非有某些原因他們需要在單獨的程序集。如果他們需要分開,那麼我會支持選項1,因爲它更簡單。

0

這裏有一個更清潔的選擇,如果你想保持你的部件分開,並保持你的ViewModels可測試:

在您的視圖模型項目,添加它提供了檢索和節約企業的設置方法或屬性的接口。讓你的ViewModel接受這個接口作爲構造函數的依賴。

在您查看項目,添加實現此接口,並設置 如會談類,

namespace ViewModel 
{ 
    public interface IBusinessSettingsStore 
    { 
     public string SomeSetting { get; set; } 
     public int AnotherSetting { get; set; } 
    } 

    public class SomeViewModel 
    { 
     private IBusinessSettingsStore _businessSettings; 

     public SomeViewModel(IBusinessSettingsStore businessSettings) 
     { 
      _businessSettings = businessSettings; 
     } 

     private void DoSomething() 
     { 
      Console.WriteLine(_businessSettings.SomeSetting); 
      _businessSettings.AnotherSetting = 10; 
     } 
    } 
} 

namespace View 
{ 
    public class BusinessSettingsStore : IBusinessSettingsStore 
    { 
     public string SomeSetting 
     { 
      get => Settings.Default.SomeSetting; 
      set => Settings.Default.SomeSetting = value; 
     } 

     public int AnotherSetting 
     { 
      get => Settings.Default.AnotherSetting; 
      set => Settings.Default.AnotherSetting = value; 
     } 
    } 
} 
0

我一直非常深刻的印象與此庫:https://www.nuget.org/packages/UserSettingsApplied/。它基本上允許你無需任何努力就可以序列化你想要的用戶漫遊應用配置。它似乎經過深思熟慮並經過了充分測試。這允許視圖模型輕鬆地保存app.config中的設置。

僅供參考View項目引用View Model完全可以。除此之外,它幾乎是強制性的,所以你的視圖可以通過視圖模型層完成其所有的持久性。