2009-01-16 45 views
0

在我的應用程序中,我需要在運行時在app.config的appSetting中更改一些值(「Environment」)。C#AppSettingsReader:「重讀」值到AppSettingsReader(運行時)?

我用AppSettingsReader

private static AppSettingsReader _settingReader; 

    public static AppSettingsReader SettingReader 
    { 
     get 
     { 
      if (_settingReader == null) 
      { 
       _settingReader = new AppSettingsReader(); 
      } 
      return _settingReader; 
     } 
    } 

然後,在某個階段,我做這個

 config.AppSettings.Settings[AppSettingString.Environment.ToString()].Value = newEnvironment.ToString(); 
     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("appSettings"); 

不過,下一次我嘗試閱讀 「環境」 這樣的

 string environment = (string)SettingReader.GetValue(AppSettingString.Environment.ToString(), typeof(System.String)); 

我結束與環境的舊價值相提並論。

我注意到,我可以通過做

_settingReader = new AppSettingsReader(); 

之前,我讀「環境」解決這個問題。

但我認爲創建一個新的實例不是正確的方法。

也許有一種方法可以讓我的SettingReader知道,值已更改爲使用它的同一個實例,但刷新值?

(不是一個項目破的問題很明顯,更多的教育之一)

回答

1

AppSettingsReader似乎不具備從磁盤重新加載任何方法。它只是從Object派生而來。創建一個新實例似乎是唯一可行的工作......我可能是錯的,但AppSettings應該是您應用的只讀值。更像是應用程序的配置參數,可以在啓動前調整。

對於讀寫應用程序設置,我認爲IDE支持的設置機制(System.Configuration.ApplicationSettingsBase)將是首選方法。這有Save和Reload方法。設計師gen類使得代碼更加可讀。
雙擊解決方案資源管理器中項目下的屬性節點。找到設置標籤。取而代之的

sEnvironment = (string)SettingReader.GetValue(AppSettingString.Environment.ToString(), typeof(System.String)); 

你可以鍵入像

sEnvironment = Properties.Settings.Default.Environment; 

設計器生成的類通過默認屬性公開一個同步的單實例屬性..這應該意味着你不需要重新加載..你總是會在應用程序中獲得最新的價值。

0
System.Configuration.ApplicationSettingsBase.Reload 
0

升級是你正在尋找

System.Configuration.ApplicationSettingsBase.Upgrade 
功能
相關問題