Injection de dépendances dans les gestionnaires d’exigences dans ASP.NET Core

Les gestionnaires d’autorisation doivent être inscrits dans la collection de services pendant la configuration à l’aide de l’injection de dépendances.

Supposons que vous disposiez d’un référentiel de règles à évaluer dans un gestionnaire d’autorisation et que ce référentiel a été inscrit dans la collection de services. L’autorisation résout ce problème et l’injecte dans le constructeur.

Par exemple, pour utiliser l’infrastructure de journalisation .NET, injectez ILoggerFactory dans le gestionnaire, comme expliqué dans l’exemple suivant :

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

Le gestionnaire précédent peut être inscrit avec n’importe quelle durée de vie du service. Le code suivant utilise AddSingleton pour inscrire le gestionnaire précédent :

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

Une instance du gestionnaire est créée au démarrage de l’application, et l’ID d’intégration injecte le ILoggerFactory inscrit dans son constructeur.

Notes

N’inscrivez pas les gestionnaires d’autorisation qui utilisent Entity Framework (EF) comme singletons.

Les gestionnaires d’autorisation doivent être inscrits dans la collection de services pendant la configuration à l’aide de l’injection de dépendances.

Supposons que vous disposiez d’un référentiel de règles à évaluer dans un gestionnaire d’autorisation et que ce référentiel a été inscrit dans la collection de services. L’autorisation résout ce problème et l’injecte dans le constructeur.

Par exemple, pour utiliser l’infrastructure de journalisation .NET, injectez ILoggerFactory dans le gestionnaire, comme expliqué dans l’exemple suivant :

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

Le gestionnaire précédent peut être inscrit avec n’importe quelle durée de vie du service. Le code suivant utilise AddSingleton pour inscrire le gestionnaire précédent :

services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();

Une instance du gestionnaire est créée au démarrage de l’application, et l’ID d’intégration injecte le ILoggerFactory inscrit dans son constructeur.

Notes

N’inscrivez pas les gestionnaires d’autorisation qui utilisent Entity Framework (EF) comme singletons.