1

.NETSystem.Configuration.SettingsProviderとApplicationSettingsBaseを使用して構成を処理するコードを見ています。

データベースをデータストアとして使用するSettingsProviderから派生したクラスがあり、次にApplicationSettingsBaseから継承し、[SettingsProvider(typeof(MySettingsProvider))]属性を持つ他の設定クラスがあります。

問題は、これらの設定クラスを複数のアプリケーションで使用していることですが、最初にロードされたときに、構成値を永続的にキャッシュしているように見えます。問題は、あるアプリケーションで設定が変更された場合、他のアプリケーションはどこにでもキャッシュされるため、次の再起動まで設定を取得しないことです。

私の質問は、SettingsProvider実装、またはApplicationSettingsBaseから派生したクラスに値をキャッシュせず、設定にアクセスするたびにデータストアを再クエリする方法はありますか?有効な答えは、これらのクラスがマルチアプリケーション環境での使用を意図していないということかもしれません...

4

1 に答える 1

3

ApplicationSettingsBaseに基づく設定オブジェクトは、インスタンス化、保存、または再ロード操作でのみ永続メカニズム/SettingsProviderと対話します。残りの時間は、設定オブジェクトのハッシュテーブルを処理しているだけです。

必要な動作を実現する方法はいくつかあります。

まず、永続化メカニズムに依存するのではなく、これらのキャッシュ不可能なプロパティを手動で実装できます。これは、通常のvs.netで生成された設定クラスのコンパニオンである部分クラスで実行できます。独自の設定クラスを実装した場合は、部分クラスは必要なく、プロパティに追加するだけで済みます。このアプローチの欠点は、その設定で読み取るたびにdbヒットが発生することです。

または、読み取りキャッシュが必要な場合でも、アプリケーション間での変更を許可します。オーバーライドできるApplicationSetttingsBase.Saveでは、ApplicationSetttingsBase.Reloadを介してすべてのサブスクライバーに更新するように通知できるパブリッシュ/サブスクライバーメカニズムを使用できます。
これははるかに複雑であり、要件によっては、設定オブジェクトの状態を一定に保つことについて心配する必要がある場合があります。

于 2010-06-06T16:11:59.433 に答える