在 ASP.NET Core要求处理程序中的依赖关系注入Dependency injection in requirement handlers in ASP.NET Core
本文内容
在配置期间,必须在服务集合中注册授权处理程序(使用依赖关系注入)。
假设你有一个规则存储库,你希望在授权处理程序中评估该存储库,并在服务集合中注册该存储库。授权将解析并注入构造函数。
例如,如果你想要使用 ASP。网络的日志记录基础结构,你需要将 ILoggerFactory
插入处理程序中。此类处理程序可能如下所示:
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;
}
}
将处理程序注册到 services.AddSingleton()
:
services.AddSingleton<IAuthorizationHandler, LoggingAuthorizationHandler>();
当应用程序启动时,将创建处理程序的实例,DI 会将已注册的 ILoggerFactory
注入构造函数中。
备注
使用实体框架的处理程序不应注册为单一实例。