Condividi tramite


Inserimento delle dipendenze nei gestori dei requisiti in ASP.NET Core

I gestori di autorizzazione devono essere registrati nella raccolta di servizi durante la configurazione usando l'inserimento delle dipendenze.

Si supponga di avere un repository di regole da valutare all'interno di un gestore di autorizzazione e che tale repository sia stato registrato nella raccolta di servizi. L'autorizzazione viene risolta e inserita nel costruttore.

Ad esempio, per usare l'infrastruttura di registrazione .NET, inserire ILoggerFactory nel gestore, come illustrato nell'esempio seguente:

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

Il gestore precedente può essere registrato con qualsiasi durata del servizio. Il codice seguente usa AddSingleton per registrare il gestore precedente:

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

Un'istanza del gestore viene creata all'avvio dell'app e l'inserimento dell'inserimento di dipendenze nel ILoggerFactory relativo costruttore.

Nota

Non registrare i gestori di autorizzazione che usano Entity Framework (EF) come singleton.

I gestori di autorizzazione devono essere registrati nella raccolta di servizi durante la configurazione usando l'inserimento delle dipendenze.

Si supponga di avere un repository di regole da valutare all'interno di un gestore di autorizzazione e che tale repository sia stato registrato nella raccolta di servizi. L'autorizzazione viene risolta e inserita nel costruttore.

Ad esempio, per usare l'infrastruttura di registrazione .NET, inserire ILoggerFactory nel gestore, come illustrato nell'esempio seguente:

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

Il gestore precedente può essere registrato con qualsiasi durata del servizio. Il codice seguente usa AddSingleton per registrare il gestore precedente:

services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();

Un'istanza del gestore viene creata all'avvio dell'app e l'inserimento dell'inserimento di dipendenze nel ILoggerFactory relativo costruttore.

Nota

Non registrare i gestori di autorizzazione che usano Entity Framework (EF) come singleton.