Sdílet prostřednictvím


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).