Injeção de dependência nos manipuladores de requisitos no ASP.NET Core
Os manipuladores de autorização devem ser registrados na coleção de serviços durante a configuração usando a injeção de dependência.
Suponha que você tinha um repositório de regras que queria avaliar dentro de um manipulador de autorização e que o repositório foi registrado na coleção de serviços. A autorização resolve e injeta isso no construtor.
Por exemplo, para usar a infraestrutura de registro em log do .NET, injete ILoggerFactory no manipulador, conforme mostrado no exemplo a seguir:
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;
}
}
O manipulador anterior pode ser registrado com qualquer tempo de vida do serviço. O código a seguir usa AddSingleton para registrar o manipulador anterior:
builder.Services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
Uma instância do manipulador é criada quando o aplicativo é iniciado, e a DI injeta o ILoggerFactory
registrado em seu construtor.
Observação
Não registre manipuladores de autorização que usando o EF (Entity Framework) como singletons.
Os manipuladores de autorização devem ser registrados na coleção de serviços durante a configuração usando a injeção de dependência.
Suponha que você tinha um repositório de regras que queria avaliar dentro de um manipulador de autorização e que o repositório foi registrado na coleção de serviços. A autorização resolve e injeta isso no construtor.
Por exemplo, para usar a infraestrutura de registro em log do .NET, injete ILoggerFactory no manipulador, conforme mostrado no exemplo a seguir:
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;
}
}
O manipulador anterior pode ser registrado com qualquer tempo de vida do serviço. O código a seguir usa AddSingleton para registrar o manipulador anterior:
services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
Uma instância do manipulador é criada quando o aplicativo é iniciado, e a DI injeta o ILoggerFactory
registrado em seu construtor.
Observação
Não registre manipuladores de autorização que usando o EF (Entity Framework) como singletons.