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.