Abhängigkeitsinjektion in Anforderungshandlern in ASP.NET Core
Autorisierungshandler müssen während der Konfiguration mithilfe der Abhängigkeitseinfügung in der Dienstsammlung registriert werden.
Angenommen, Sie hatten ein Repository von Regeln, die Sie innerhalb eines Autorisierungshandlers bewerten möchten, und dieses Repository wurde in der Dienstsammlung registriert. Autorisierung löst dies auf und fügt dies in den Konstruktor ein.
Wenn Sie beispielsweise die .NET-Protokollierungsinfrastruktur verwenden möchten, geben ILoggerFactory Sie den Handler ein, wie im folgenden Beispiel gezeigt:
public class SampleAuthorizationHandler : AuthorizationHandler<SampleRequirement>
{
private readonly ILogger _logger;
public SampleAuthorizationHandler(ILoggerFactory loggerFactory)
=> _logger = loggerFactory.CreateLogger(GetType().FullName);
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext context, SampleRequirement requirement)
{
_logger.LogInformation("Inside my handler");
// ...
return Task.CompletedTask;
}
}
Der vorherige Handler kann mit einer beliebigen Dienstlebensdauer registriert werden. Der folgende Code verwendet AddSingleton zum Registrieren des vorherigen Handlers:
builder.Services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
Eine Instanz des Handlers wird erstellt, wenn die App gestartet wird, und DI fügt den registrierten ILoggerFactory
Konstruktor ein.
Hinweis
Registrieren Sie keine Autorisierungshandler, die Entity Framework (EF) als Singletons verwenden.
Autorisierungshandler müssen während der Konfiguration mithilfe der Abhängigkeitseinfügung in der Dienstsammlung registriert werden.
Angenommen, Sie hatten ein Repository von Regeln, die Sie innerhalb eines Autorisierungshandlers bewerten möchten, und dieses Repository wurde in der Dienstsammlung registriert. Autorisierung löst dies auf und fügt dies in den Konstruktor ein.
Wenn Sie beispielsweise die .NET-Protokollierungsinfrastruktur verwenden möchten, geben ILoggerFactory Sie den Handler ein, wie im folgenden Beispiel gezeigt:
public class SampleAuthorizationHandler : AuthorizationHandler<SampleRequirement>
{
private readonly ILogger _logger;
public SampleAuthorizationHandler(ILoggerFactory loggerFactory)
=> _logger = loggerFactory.CreateLogger(GetType().FullName);
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext context, SampleRequirement requirement)
{
_logger.LogInformation("Inside my handler");
// ...
return Task.CompletedTask;
}
}
Der vorherige Handler kann mit einer beliebigen Dienstlebensdauer registriert werden. Der folgende Code verwendet AddSingleton zum Registrieren des vorherigen Handlers:
services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
Eine Instanz des Handlers wird erstellt, wenn die App gestartet wird, und DI fügt den registrierten ILoggerFactory
Konstruktor ein.
Hinweis
Registrieren Sie keine Autorisierungshandler, die Entity Framework (EF) als Singletons verwenden.