2009-01-16 7 views
0

Dans mon application, j'ai besoin de changer une valeur ("Environnement") dans appSetting de app.config à l'exécution.C# AppSettingsReader: "relit" les valeurs dans AppSettingsReader (runtime)?

J'utilise AppSettingsReader

private static AppSettingsReader _settingReader; 

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

Puis à un moment donné, je le fais

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

Cependant, la prochaine fois que j'essaie de lire "Environnement" comme celui-ci

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

Je finis avec l'ancienne valeur de l'environnement.

je remarquai que je peux résoudre ce problème en faisant

_settingReader = new AppSettingsReader(); 

avant d'avoir lu « Environnement ».

Mais je pense que la création d'une nouvelle instance n'est pas la bonne approche.

Peut-être y a-t-il un moyen de faire savoir à mon SettingReader que les valeurs ont changé pour utiliser la même instance, mais avec des valeurs rafraîchies?

(pas un projet révolutionnaire question évidemment, plus d'un ordre éducatif)

Répondre

1

AppSettingsReader ne semble pas avoir une méthode pour recharger à partir du disque. Cela vient juste de Object. Créer une nouvelle instance semble être la seule chose qui fonctionnerait ... Je peux me tromper, mais les AppSettings sont censés être des valeurs en lecture seule pour votre application. Plus comme des paramètres de configuration pour votre application qui peuvent être modifiés avant le démarrage.

Pour les paramètres d'application en lecture-écriture, je pense que le mécanisme de paramètres avec support IDE (System.Configuration.ApplicationSettingsBase) serait l'approche préférée. Cela a Save et Reload méthodes. La classe designer-gen rend également le code beaucoup plus lisible.
Double-cliquez sur le nœud Propriétés sous votre projet dans l'Explorateur de solutions. Trouvez l'onglet Paramètres.

Au lieu de

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

vous pourriez avoir des propriétés typées comme

sEnvironment = Properties.Settings.Default.Environment; 

Le concepteur classe générée expose une instance singleton synchronisée via la propriété par défaut .. ce qui devrait vous dire ne pas besoin pour recharger .. vous obtiendrez toujours la dernière valeur dans l'application.

0
System.Configuration.ApplicationSettingsBase.Reload 
0

Upgrade est la fonction que vous recherchez

System.Configuration.ApplicationSettingsBase.Upgrade