Mein alter Code sieht so aus:
%Vor%Da wir HttpContext im Kern nicht mehr leicht zugänglich haben, wie kann ich dasselbe erreichen?
Ich muss von überall auf CurrentDb()
zugreifen
Möchte etwas wie MemoryCache verwenden, aber mit Request lifetime. DI es ist keine Option für dieses Projekt
Sie könnten diesen Code komplett neu entwerfen: Verwenden Sie die integrierte DI und registrieren Sie Database
instance als Bereich (pro Webanforderung) mit der Factory-Methode:
Einführung in Dependency Injection in ASP.NET Core
.net-Kernabhängigkeits-Injektionslebenszeiten erklärt
>Diese Sammlung ist ab dem Start einer HttpRequest verfügbar und wird am Ende jeder Anfrage verworfen.
Speichern Sie einen Wert für einen aktuellen asynchronen Kontext (eine Art [ThreadStatic]
mit asynchroner Unterstützung). So wird HttpContext
tatsächlich gespeichert: HttpContextAccessor .
Was ist der Effekt von AsyncLocal & lt; T & gt; in nicht async / erwarten Code?
Ist die Datenbank oder die Verbindungszeichenfolge nicht identisch in der Anfragen?
Wenn ja, dann könnten Sie es mit einer statischen Variable und Middleware machen.
Die Middleware würde die Informationen zu jedem Anfragebeginn überprüfen und festlegen, und die statische Variable würde den Wert speichern, so dass Ihre Methode sie aus der statischen Variable lesen könnte.
Ein anderer einfacherer Ansatz wäre, den IHttpContextAccessor als Parameter zu injizieren. Damit können Sie minimale Änderungen vornehmen, aber Sie müssen den IHttpContextAccessor-Dienst von jeder aufrufenden Methode übergeben.
Tags und Links c# caching asp.net-core asp.net-core-mvc