Inserción de dependencias en controladores de requisitos en ASP.NET Core

Los controladores de autorización se deben registrar en la colección de servicios durante la configuración mediante la inserción de dependencias.

Supongamos que tenía un repositorio de reglas que quería evaluar dentro de un controlador de autorización y ese repositorio se registró en la colección de servicios. La autorización se resuelve y se inserta en el constructor.

Por ejemplo, para usar la infraestructura de registro de .NET, inserte ILoggerFactory en el controlador, como se muestra en el ejemplo siguiente:

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;
    }
}

El controlador anterior se puede registrar con cualquier duración del servicio. El código siguiente usa AddSingleton para registrar el controlador anterior:

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

Una instancia del controlador se crea cuando se inicia la aplicación y la inserción de dependencias inserta el ILoggerFactory registrado en su constructor.

Nota:

No registre controladores de autorización que usen Entity Framework (EF) como singletons.

Los controladores de autorización se deben registrar en la colección de servicios durante la configuración mediante la inserción de dependencias.

Supongamos que tenía un repositorio de reglas que quería evaluar dentro de un controlador de autorización y ese repositorio se registró en la colección de servicios. La autorización se resuelve y se inserta en el constructor.

Por ejemplo, para usar la infraestructura de registro de .NET, inserte ILoggerFactory en el controlador, como se muestra en el ejemplo siguiente:

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;
    }
}

El controlador anterior se puede registrar con cualquier duración del servicio. El código siguiente usa AddSingleton para registrar el controlador anterior:

services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();

Una instancia del controlador se crea cuando se inicia la aplicación y la inserción de dependencias inserta el ILoggerFactory registrado en su constructor.

Nota:

No registre controladores de autorización que usen Entity Framework (EF) como singletons.