2016-07-18 8 views
3

私はasp.net Core Rc2アプリケーションを持っています。ASP.NET Core RC2アプリケーションでIOptionsを手動でリロードする方法

services.AddOptions(); 
services.AddSingleton<IOptions<DocumentParameters>, DocumentParametersConfigureOptions>(); 

すべてのパラメータはDocumentParametersConfigureOptionクラスのデータベースからロードされます:店舗システムの設定に私はそのように設定されているIOptionsメカニズムを使用します。このソリューションのおかげで、すべてのシステム設定をコントローラ/サービスに簡単に注入でき、サーバ側にキャッシュされます(アプリケーション開始時にのみロードされます)。

設定が変更できる(データベースで変更される)ページもあります。ユーザーがWebアプリケーションを再起動せずに[保存]をクリックしたときに、それらを再ロードしたいと思います。

+2

私はAddScoped' 'にあなたの' AddSingleton'を変更することであると考えることができる最も簡単でこれを達成することができます。しかし、これは、あなたが避けたいと思っているすべてのリクエストに対してデータベースを1回ヒットすることを意味します。問題は、変更が発生したときに設定をリロードするタイミングを知ることにあります。また、Webページが変更されたときにオプションのシングルトンインスタンスを変更したくないということに注意してください。一部の要求が汚れた状態になる可能性があります(変更の前にいくつかの設定が読み込まれています)。 –

+1

起動時にすべての設定を読み込む最初のアクセス時にそれらを読み込み遅延させてキャッシュすることを検討し、後続の要求がデータベースに送られないようにします。設定を変更すると、単にキャッシュを消去する必要があり、設定に対する次のアクセス要求がデータベースから再設定されます。あなたの 'Startup'クラスで' services.AddMemoryCache() 'を使って注入できる' IMemoryCache'サービスを調べる価値があります。 – Brad

答えて

3

memory cachingでの使用。

ロード時に、ここにコンフィギュレーションを入力します。決定的な接続/解決については、そこから読んでください。 UIを使用して更新する場合は、キャッシュを無効にする(キャンセルトークンを使用する、上のリンクを参照)か、既存の値を上書きして手動で戻すだけです。

+0

私はメモリキャッシュの事でこれを試してみると思います。ありがとう – Ellbar

0

IOptionsの2つ目のセットを作成し、AddTransientまたはAddScopedのいずれかで注入します。

一時的なサービスは要求されるたびに作成され、有効なサービスは要求ごとに1回作成されます。

Here's a linkとサービスライフタイムに関するドキュメント。

関連する問題