0

私のアプリケーションでは、実行時に app.config の appSetting の値 (「環境」) を変更する必要があります。

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 に、同じインスタンスを使用するように値が変更されたことを知らせる方法がありますが、値は更新されていますか?

(明らかにプロジェクトを壊す質問ではなく、より教育的な質問です)

4

3 に答える 3

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 プロパティを介して同期されたシングルトン インスタンスを公開します。これは、リロードする必要がないことを意味します。アプリケーション内で常に最新の値を取得します。

于 2009-01-16T06:14:27.317 に答える
0
System.Configuration.ApplicationSettingsBase.Reload
于 2009-01-16T01:43:16.303 に答える