Injektáž závislostí v obslužných rutinách požadavků v ASP.NET Core
Obslužné rutiny autorizace musí být během konfigurace registrovány v kolekci služeb pomocí injektáže závislostí.
Předpokládejme, že jste měli úložiště pravidel, která chcete vyhodnotit uvnitř obslužné rutiny autorizace a toto úložiště bylo zaregistrováno v kolekci služeb. Autorizace se přeloží a vloží ji do konstruktoru.
Pokud například chcete použít infrastrukturu protokolování .NET, vložte ILoggerFactory ji do obslužné rutiny, jak je znázorněno v následujícím příkladu:
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;
}
}
Předchozí obslužnou rutinu lze zaregistrovat s jakoukoli životností služby. Následující kód slouží AddSingleton k registraci předchozí obslužné rutiny:
builder.Services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
Instance obslužné rutiny se vytvoří při spuštění aplikace a DI vloží zaregistrovaný ILoggerFactory
do jeho konstruktoru.
Poznámka
Nezaregistrujte obslužné rutiny autorizace, které jako jednoúčelové rutiny používají Entity Framework (EF).
Obslužné rutiny autorizace musí být během konfigurace registrovány v kolekci služeb pomocí injektáže závislostí.
Předpokládejme, že jste měli úložiště pravidel, která chcete vyhodnotit uvnitř obslužné rutiny autorizace a toto úložiště bylo zaregistrováno v kolekci služeb. Autorizace se přeloží a vloží ji do konstruktoru.
Pokud například chcete použít infrastrukturu protokolování .NET, vložte ILoggerFactory ji do obslužné rutiny, jak je znázorněno v následujícím příkladu:
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;
}
}
Předchozí obslužnou rutinu lze zaregistrovat s jakoukoli životností služby. Následující kód slouží AddSingleton k registraci předchozí obslužné rutiny:
services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
Instance obslužné rutiny se vytvoří při spuštění aplikace a DI vloží zaregistrovaný ILoggerFactory
do jeho konstruktoru.
Poznámka
Nezaregistrujte obslužné rutiny autorizace, které jako jednoúčelové rutiny používají Entity Framework (EF).