C#AppSettingsReader:将“重读”值放入AppSettingsReader(运行时)?

时间:2009-01-16 00:47:13

标签: c# configuration app-config

在我的应用程序中,我需要在运行时app.config appSetting中更改一些值(“Environment”)。

我使用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知道,值已经改变为使用相同的实例,但是刷新了值?

(显然不是一个破坏项目的问题,更像是一个教育问题)

3 个答案:

答案 0 :(得分:1)

AppSettingsReader似乎没有任何方法可以从磁盘重新加载。它只是派生自Object。创建一个新实例似乎是唯一可行的...我可能错了,但AppSettings应该是您应用的只读值。更像是应用程序的配置参数,可以在启动之前进行调整。

对于读写应用程序设置,我认为IDE支持的设置机制(System.Configuration.ApplicationSettingsBase)将是首选方法。这有Save和Reload方法。 designer-gen类使代码更具可读性。
双击解决方案资源管理器中项目下的“属性”节点。找到“设置”选项卡。

而不是

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

你可以输入类似

的属性
sEnvironment = Properties.Settings.Default.Environment;

设计器生成的类通过Default属性公开同步的单例实例..这意味着你不需要重新加载..你总是在应用程序中获得最新的值。

答案 1 :(得分:0)

System.Configuration.ApplicationSettingsBase.Reload

答案 2 :(得分:0)

升级是您正在寻找的功能

System.Configuration.ApplicationSettingsBase.Upgrade