Abhängigkeitsinjektion in Anforderungshandlern in ASP.NET Core

Autorisierungshandler müssen während der Konfiguration mithilfe der Abhängigkeitsinjektion in der Dienstsammlung registriert werden.

Angenommen, Sie hatten ein Repository mit Regeln, die Sie in einem Autorisierungshandler auswerten möchten, und dieses Repository wurde in der Dienstsammlung registriert. Die Autorisierung löst diese auf und fügt sie in den Konstruktor ein.

Um z. B. die .NET-Protokollierungsinfrastruktur zu verwenden, führen 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 vorherige Handler kann mit einer beliebigen Dienstlebensdauer registriert werden. Im folgenden Code wird verwendet, AddSingleton um den vorherigen Handler zu registrieren:

builder.Services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();

Eine Instanz des Handlers wird erstellt, wenn die App gestartet wird, und DI fügt den registrierten ILoggerFactory in seinen Konstruktor ein.

Hinweis

Registrieren Sie keine Autorisierungshandler, die Entity Framework (EF) als Singletons verwenden.

Autorisierungshandler müssen während der Konfiguration mithilfe der Abhängigkeitsinjektion in der Dienstsammlung registriert werden.

Angenommen, Sie hatten ein Repository mit Regeln, die Sie in einem Autorisierungshandler auswerten möchten, und dieses Repository wurde in der Dienstsammlung registriert. Die Autorisierung löst diese auf und fügt sie in den Konstruktor ein.

Um z. B. die .NET-Protokollierungsinfrastruktur zu verwenden, führen 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 vorherige Handler kann mit einer beliebigen Dienstlebensdauer registriert werden. Im folgenden Code wird verwendet, AddSingleton um den vorherigen Handler zu registrieren:

services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();

Eine Instanz des Handlers wird erstellt, wenn die App gestartet wird, und DI fügt den registrierten ILoggerFactory in seinen Konstruktor ein.

Hinweis

Registrieren Sie keine Autorisierungshandler, die Entity Framework (EF) als Singletons verwenden.