古いMVC5 System.Webベースのスタックからいくつかのライブラリを.Netコアに移植しようとしています。私が抱えている問題の1つは、キャッシュの変更です。例えば、MVC5に私は国際化関連データを読み書きすることができました:.NETコアでのHttpContextとキャッシュ> = 1.0
[コードスニペット1]
public static Dictionary<string, IEnumerable<CoreDictionaryResource>> DictionaryResourcesCache {
get { return (Dictionary<string, IEnumerable<CoreDictionaryResource>>)HttpContext.Current.Cache(string.Concat(_Dictionary, DictionaryID, CultureID)); }
set { HttpContext.Current.Cache(string.Concat(_Dictionary, DictionaryID, CultureID)) = value; }
}
しかし、私は確実にSystem.Web
こととそのHttpContext
は、キャッシュのフィールドが含まれていません知らされています。私はCurrent
フィールドを見ることができ、次にApplication
とSession
のようなフィールドのホスト全体はCache
ではありません。
私はStartup.cs
で必要な処理を行っており、アプリケーションはメモリキャッシュとセッションの両方を使用するように設定されています。私は、他のPOCOSが
[コードスニペット2]私が作成した拡張機能で
return System.Web.HttpContext.Current.Session.GetObject<User>("AuthenticatedUser");
GetObject
を使用して、キャッシュされていてセッションが動作していることを知っています。
は私がキャッシュから読み出しまたは多分私はhere,hereとSO上を見るようにIDistributedCache
を使用する必要があるためにHttpContext
を使用しようとし、誤ったツリーを吠えています。
しかし、実際に私はポートに[コードスニペット1]内の方法は...
あなたはキャッシングに関して新しい.NETのコアに与えることができ、任意のポインタは本当に参考になります。
ちょうど、私はコントローラやビューではロジックを望んでいません。私が構築しているアプリケーションは、データアクセスとロジックのために別々のDLLを使用していますので、DIの例をコントローラに投稿しないでください。この問題は、MVCスタックにヒットする前に、インフラストラクチャレベルで多く発生しています。
ありがとうございます。
また、私たちのi18n文字列はXMLではなく個別のDBインスタンス内に格納されています...しかし、データアクセス層内のCRUDメソッドが正しく動作しているので、これは問題ではありません。私はちょうどこれらのサーバー側をキャッシュし、それらを読み出す方法を考え出す必要があります。 –
しかし、起動時にメモリ(またはRedisのような分散キャッシュ)を 'services.AddMemoryCache();'で登録し、 'IDistributedCache'または' IMemoryCache'を解決してミドルウェアで解決することができます。 ASP.NETコアのIoC/DIの性質や反パターンに対して、静的フィールドは使用できません。または、ロジックをラップするクラスを作成します。または、データベースまたはメモリキャッシュをラップする新しいローカリゼーション機能を使用してください。 – Tseng
参照:https://github.com/damienbod/AspNet5Localization/blob/master/AspNet5Localization/src/Localization.SqlLocalizer/DbStringLocalizer/SqlStringLocalizer.cs for SQLサーバーの例 – Tseng