Partager via


Injection de dépendances dans les gestionnaires de conditions requises 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 que vous vouliez évaluer à l’intérieur d’un gestionnaire d’autorisation et que ce référentiel a été inscrit dans la collection de services. L’autorisation résout et injecte cela dans le constructeur.

Par exemple, pour utiliser l’infrastructure de journalisation .NET, injectez ILoggerFactory dans le gestionnaire, comme illustré 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'injection de dépendance (DI) injecte l'élément enregistré ILoggerFactory dans son constructeur.

Note

N’inscrivez pas de gestionnaires d’autorisation qui utilisent Entity Framework (EF) en tant que 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 que vous vouliez évaluer à l’intérieur d’un gestionnaire d’autorisation et que ce référentiel a été inscrit dans la collection de services. L’autorisation résout et injecte cela dans le constructeur.

Par exemple, pour utiliser l’infrastructure de journalisation .NET, injectez ILoggerFactory dans le gestionnaire, comme illustré 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’adresse d’interface de base de données injecte l’objet inscrit ILoggerFactory dans son constructeur.

Note

N’inscrivez pas de gestionnaires d’autorisation qui utilisent Entity Framework (EF) en tant que singletons.