Injection de dépendances dans les gestionnaires d’exigences dans ASP.NET CoreDependency injection in requirement handlers in ASP.NET Core

Les gestionnaires d’autorisation doivent être inscrit dans la collection de service lors de la configuration (à l’aide de l’injection de dépendances).Authorization handlers must be registered in the service collection during configuration (using dependency injection).

Supposons que vous ayez un référentiel de règles que vous souhaitez évaluer à l’intérieur d’un gestionnaire d’autorisation, et ce référentiel a été inscrit dans la collection de service.Suppose you had a repository of rules you wanted to evaluate inside an authorization handler and that repository was registered in the service collection. L’autorisation sera résoudre et qui injecter dans votre constructeur.Authorization will resolve and inject that into your constructor.

Par exemple, si vous souhaitez utiliser ASP. NET d’enregistrement d’infrastructure, vous pouvez injecter ILoggerFactory dans votre gestionnaire.For example, if you wanted to use ASP.NET's logging infrastructure you would want to inject ILoggerFactory into your handler. Ce gestionnaire peut ressembler :Such a handler might look like:

public class LoggingAuthorizationHandler : AuthorizationHandler<MyRequirement>
   {
       ILogger _logger;

       public LoggingAuthorizationHandler(ILoggerFactory loggerFactory)
       {
           _logger = loggerFactory.CreateLogger(this.GetType().FullName);
       }

       protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
       {
           _logger.LogInformation("Inside my handler");
           // Check if the requirement is fulfilled.
           return Task.CompletedTask;
       }
   }

Vous devez enregistrer le gestionnaire avec services.AddSingleton():You would register the handler with services.AddSingleton():

services.AddSingleton<IAuthorizationHandler, LoggingAuthorizationHandler>();

Une instance du gestionnaire va être créé au démarrage de votre application et est de l’injection de dépendances injecter inscrit ILoggerFactory dans votre constructeur.An instance of the handler will be created when your application starts, and DI will inject the registered ILoggerFactory into your constructor.

Notes

Les gestionnaires qui utilisent Entity Framework ne doit pas être enregistrés en tant que singletons.Handlers that use Entity Framework shouldn't be registered as singletons.