So pro Cache Caching im ASP.net-Core

8

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

    
Eduardo Molteni 03.06.2017, 20:33
quelle

2 Antworten

6

1. Abhängigkeitsinjektion

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:

%Vor%

Einführung in Dependency Injection in ASP.NET Core

.net-Kernabhängigkeits-Injektionslebenszeiten erklärt

>

2. HttpContext.Items

Google Docs :

  

Diese Sammlung ist ab dem Start einer HttpRequest verfügbar und wird am Ende jeder Anfrage verworfen.

3. AsyncLocal & lt; T & gt;

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?

ThreadStatic in der asynchronen ASP.NET Web API

    
Ilya Chumakov 03.06.2017, 21:01
quelle
1
  

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.

    
Satyajit 13.06.2017 10:24
quelle