在 ASP.NET Core要求处理程序中的依赖关系注入Dependency injection in requirement handlers in ASP.NET Core

本文内容

在配置期间,必须在服务集合中注册授权处理程序(使用依赖关系注入)。

假设你有一个规则存储库,你希望在授权处理程序中评估该存储库,并在服务集合中注册该存储库。授权将解析并注入构造函数。

例如,如果你想要使用 ASP。网络的日志记录基础结构,你需要将 ILoggerFactory 插入处理程序中。此类处理程序可能如下所示:

  1. public class LoggingAuthorizationHandler : AuthorizationHandler<MyRequirement>
  2. {
  3. ILogger _logger;
  4. public LoggingAuthorizationHandler(ILoggerFactory loggerFactory)
  5. {
  6. _logger = loggerFactory.CreateLogger(this.GetType().FullName);
  7. }
  8. protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
  9. {
  10. _logger.LogInformation("Inside my handler");
  11. // Check if the requirement is fulfilled.
  12. return Task.CompletedTask;
  13. }
  14. }

将处理程序注册到 services.AddSingleton()

  1. services.AddSingleton<IAuthorizationHandler, LoggingAuthorizationHandler>();

当应用程序启动时,将创建处理程序的实例,DI 会将已注册的 ILoggerFactory 注入构造函数中。

备注

使用实体框架的处理程序不应注册为单一实例。