Abhängigkeitsinjektion in Anforderungshandlern in ASP.NET Core
Autorisierungshandler müssen während der Konfiguration mithilfe von Dependency Injection in der Dienstsammlung registriert werden.
Angenommen, Sie möchten Regeln in einem Repository, das in der Dienstsammlung registriert wurde, in einem Autorisierungshandler auswerten. Die Autorisierung löst dies auf und fügt es in den Konstruktor ein.
Um beispielsweise die .NET-Protokollierungsinfrastruktur zu verwenden, fügen Sie ILoggerFactory in 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 vorstehende Handler kann mit einer beliebigen Dienstlebensdauer registriert werden. Im folgenden Code wird AddSingleton zum Registrieren des vorstehenden Handlers verwendet:
builder.Services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
Eine Instanz des Handlers wird beim Starten der App erstellt, und DI fügt die registrierte ILoggerFactory
in den Konstruktor ein.
Hinweis
Registrieren Sie keine Autorisierungshandler, die Entity Framework (EF) als Singletons verwenden.
Autorisierungshandler müssen während der Konfiguration mithilfe von Dependency Injection in der Dienstsammlung registriert werden.
Angenommen, Sie möchten Regeln in einem Repository, das in der Dienstsammlung registriert wurde, in einem Autorisierungshandler auswerten. Die Autorisierung löst dies auf und fügt es in den Konstruktor ein.
Um beispielsweise die .NET-Protokollierungsinfrastruktur zu verwenden, fügen Sie ILoggerFactory in 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 vorstehende Handler kann mit einer beliebigen Dienstlebensdauer registriert werden. Im folgenden Code wird AddSingleton zum Registrieren des vorstehenden Handlers verwendet:
services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
Eine Instanz des Handlers wird beim Starten der App erstellt, und DI fügt die registrierte ILoggerFactory
in den Konstruktor ein.
Hinweis
Registrieren Sie keine Autorisierungshandler, die Entity Framework (EF) als Singletons verwenden.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für