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.