.NET Webアプリケーションのweb.configファイルを変更すると、アプリが再起動し、更新された構成が読み取られることは誰もが知っています。コンソールまたはWinFormsアプリでそれをどのように行いますか?ありがとう :)
7 に答える
ファイルを監視し、関連するイベントを処理するには、おそらく FileSystemWatcher が必要です。System.Configuration.ConfigManager クラスには、リロードする関連メソッド (メソッド呼び出しなど) がある場合があります。私の前に VS はありませんが、確実にいくつかのフックがあると思います。
構成ファイルが変更されたときに通知を受けるには、FileSystemWatcher を使用します。
ConfigurationManager.RefreshSectionを使用 して、アプリを再起動せずにディスクから更新します。
FileSystemWatcherを作成し、構成ファイルの変更をリッスンします。
トリガーされたら、次のコードを使用します。
MyGeneratedSettingsFile.Default.Reload();
実際にデータのリロードを行うための適切なセクションがここにあります。DarkwingDuck によって提案されているように、それを FileSystemWatcher と組み合わせると、勝者になる可能性があります。
log4net には、*.config ファイルへの外部変更を検出するオプションがあります。そして、他の誰もがすでに言っているように、これは *.config ファイルへの変更をリッスンするように設定された FileSystemWatcher を使用して行われます。
要点; FileSystemWatcher がその方法です。
ただし、単純に構成ファイルをリロードすることには、より広い意味があります。それが、アプリケーションの残りの部分がこれに反応する方法です。
たとえば、SQL Server と対話することを構成から読み取って、その接続文字列を取得した後、SQL Server のデータベース コンテキスト レイヤーを構成する場合があります。
しかし、ユーザーが後でそれを変更し、代わりに Oracle データベースを指定した場合はどうなるでしょうか? 構成ファイルを単にリロードするだけでは十分ではありません。何かが変更されたことをアプリケーションの残りの部分にも伝えることができる必要があります。
イベントを持つ新しいクラス内の構成部分を抽象化する必要があると思います。構成をリロードすることを決定すると、このクラスはどの設定が変更されたかを内部的に把握し、適切なイベントを発生させる必要があります。
IoC コンテナーを使用している場合は、新しい設定のために依存関係の一部を再配線する必要がある場合があります。
このように、構成に依存し、何らかの理由で構成設定を特定の時間間隔でローカルにキャッシュする可能性のあるアプリケーションの一部は、関連するイベントにフックし、それらの起動に応答する必要があります。
実際に構成ファイル自体を検出してリロードすることに関しては、他の回答がそれを非常によくカバーしているように見えるので、ここでは繰り返しません。
.NET Framework 2 を使用していて、ユーザースコープ設定を使用している場合、かなり透過的です。設定を変更した後、Save() メソッドを呼び出すだけで、新しい設定がすぐに利用可能になります
例えば
My.Settings.UpdateInterval = 10
My.Settings.Save()
設定がアプリケーション スコープの場合、FileSystemWatcher が適している可能性があります。