2017-06-12 4 views
2

Ich muss einige Daten in eine ASP NET CORE MiddlewareWie primitive Daten zu asp.net Core Middleware übergeben werden

z. Wenn dies eine Liste von Zeichenfolgen ist, verwenden Sie denselben Mechanismus wie die Übergabe eines Dienstes?

z.B. Fügen Sie es der Invoke-Methode als Parameter hinzu und registrieren Sie es bei der DI?

Wenn ja, wie machen Sie die Registrierung für primitive Typen? z.B. eine Reihe von Strings. muss es ein benannter Typ oder etwas ähnliches sein?

Oder können wir die Daten auf andere Weise weitergeben?

dank

Antwort

3

Nehmen wir an, wir eine Middleware haben:

public class FooMiddleware 
{ 
    public FooMiddleware(RequestDelegate next, List<string> list) 
    { 
     _next = next; 
    } 
} 

einfach eine Liste zu UseMiddleware Anruf übergeben es pro-Middleware zu lösen:

app.UseMiddleware<FooMiddleware>(new List<string>()); 

Sie ein erstellen können DTO und pass es:

public FooMiddleware(RequestDelegate next, Payload payload) 
.... 
app.UseMiddleware<FooMiddleware>(new Payload());  

Oder registrieren Sie dieses DTO in DI-Container, wird es in Middleware gelöst werden:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddSingleton<Payload>(new Payload()); 
} 

Darüber hinaus ermöglicht DI-Container pro Anforderung Abhängigkeiten zu lösen:

public async Task Invoke(HttpContext httpContext, IMyScopedService svc) 
{ 
    svc.MyProperty = 1000; 
    await _next(httpContext); 
} 

Documentation:

Da Middleware bei App Startu konstruiert wird p, nicht per-Request, Bereich Lebensdauerservices, die von Middleware-Konstruktoren verwendet werden, werden bei jeder Anforderung nicht mit anderen dependenzinjizierten Typen geteilt. Wenn Sie einen Bereich Service zwischen Ihrer Middleware und anderen Typen teilen müssen, fügen Sie diese Dienste der Signatur Invoke Methode hinzu. Die Methode Invoke kann zusätzliche Parameter akzeptieren, die von Dependency Injection aufgefüllt werden.

Verwandte Themen