Ich versuche, einige Bibliotheken aus dem alten MVC5 System.Web basierten Stack zu .Net Core zu portieren. Ein Problem, das ich habe, ist die Änderungen im Caching. Zum Beispiel in MVC5 konnte ich i18n bezogene Daten lesen und schreiben:HttpContext und Caching in .NET Core> = 1.0
[Codeschnipsel 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; }
}
Allerdings ist mir zuverlässig darüber informiert, dass System.Web
und seine HttpContext
kein Cache-Feld enthalten. Ich kann ein Current
Feld und dann eine ganze Reihe von Feldern innerhalb dieser wie Application
und Session
aber leider keine Cache
sehen.
Ich habe die notwendigen in Startup.cs
getan und die App ist so konfiguriert, dass beide im Speicher Caching und Sitzungen verwendet werden. Ich weiß, dass die Sitzungen arbeiten, wie ich andere POCOs haben
[Code Snippet 2]
return System.Web.HttpContext.Current.Session.GetObject<User>("AuthenticatedUser");
wo GetObject
in einer Erweiterung zwischengespeicherten mit I erstellt.
Bin ich den Holzweg versucht HttpContext
zu verwenden, aus dem Cache lesen oder vielleicht muss ich IDistributedCache
verwenden, wie here,here und auf SO sehen.
Aber wirklich nur an Port I das Verfahren innerhalb von [Codeschnipsel 1] ...
Alle Zeiger Sie auf dem neuen Net-Core in Bezug auf Caching wäre wirklich hilfreich geben kann.
Nur FYI Ich möchte keine Logik in Controllern, noch in Ansichten. Die Anwendung, die ich erstelle, verwendet separate DLLs für den Datenzugriff und die Logik, also poste bitte keine Beispiele mit DI in den Controllern. Dieses Problem tritt eher auf einer Infrastrukturebene auf, bevor es den MVC-Stack erreicht.
Danke Jungs und Mädels.
Außerdem werden unsere i18n-Zeichenfolgen nicht mit XML gespeichert, sondern in einer benutzerdefinierten DB-Instanz ... Dies sollte jedoch kein Problem darstellen, da die CRUD-Methoden innerhalb der Datenzugriffsebene ordnungsgemäß funktionieren. Ich muss nur herausfinden, wie man diese Server-Seite zwischenspeichert und sie ausliest. –
Jetzt können Sie Speicher (oder verteilten Cache wie Redis) beim Start mit 'services.AddMemoryCache();' registrieren, dann 'IDistributedCache' oder 'IMemoryCache' auflösen und in Ihrer Middleware auflösen. Sie können nur statische Felder nicht verwenden, da dies gegen die IoC/DI-Natur von ASP.NET Core und ein Anti-Pattern ist. Oder Sie erstellen eine Klasse dafür, die die Logik umschließt. Oder verwenden Sie einfach die neue Lokalisierungsfunktion, die eine Datenbank oder einen Speichercache umgibt, – Tseng
, siehe https://github.com/damienbod/AspNet5Localization/blob/master/AspNet5Localization/src/Localization.SqlLocalizer/DbStringLocalizer/SqlStringLocalizer.cs für sql Serverbeispiel – Tseng