Einfügung von Abhängigkeiten 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 von Regeln, die Sie in einem Autorisierungshandler auswerten wollten und dass das Repository in der Dienstsammlung registriert wurde. Die Autorisierung löst dies auf und fügt sie in den Konstruktor ein.

Wenn Sie zum Beispiel die .NET-Protokollierungsinfrastruktur nutzen möchten, fügen Sie ILoggerFactory in den Handler ein, wie im folgenden Beispiel:

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 vorangehende Handler kann mit einer beliebigen Dienstlebensdauer registriert werden. Der folgende Code verwendet AddSingleton , um den vorherigen Handler zu registrieren:

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 der Abhängigkeitsinjektion in der Dienstsammlung registriert werden.

Angenommen, Sie hatten ein Repository von Regeln, die Sie in einem Autorisierungshandler auswerten wollten und dass das Repository in der Dienstsammlung registriert wurde. Die Autorisierung löst dies auf und fügt sie in den Konstruktor ein.

Wenn Sie zum Beispiel die .NET-Protokollierungsinfrastruktur nutzen möchten, fügen Sie ILoggerFactory in den Handler ein, wie im folgenden Beispiel:

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 vorangehende Handler kann mit einer beliebigen Dienstlebensdauer registriert werden. Der folgende Code verwendet AddSingleton , um den vorherigen Handler zu registrieren:

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.