C # AppSettingsReader: «перечитать» значения в AppSettingsReader (время выполнения)? - PullRequest
0 голосов
/ 16 января 2009

В моем приложении мне нужно изменить какое-то значение ("Среда") в appSetting app.config во время выполнения.

Я использую 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));

Я получаю старое значение Environment.

Я заметил, что могу это исправить, выполнив

_settingReader = new AppSettingsReader();

прежде чем я прочитаю "Окружающая среда".

Но я думаю, что создание нового экземпляра не является правильным подходом.

Может быть, есть способ сообщить моему SettingReader, что значения были изменены, чтобы использовать тот же экземпляр, но с обновленными значениями?

(Очевидно, это не вопрос проекта, а скорее вопрос образования)

Ответы [ 3 ]

1 голос
/ 16 января 2009

AppSettingsReader, похоже, не имеет способа перезагрузки с диска. Это просто происходит от объекта. Создание нового экземпляра, кажется, единственное, что сработает ... Я могу ошибаться, но 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. Это означает, что вам не нужно перезагружать ... вы всегда получите последнее значение в приложении.

0 голосов
/ 26 февраля 2009

Обновление - это функция, которую вы ищете

System.Configuration.ApplicationSettingsBase.Upgrade
0 голосов
/ 16 января 2009
System.Configuration.ApplicationSettingsBase.Reload
...