ASP.NET Core 中的要求处理程序中的依赖项注入
在使用依赖项注入进行配置过程中,必须在服务集合中注册授权处理程序。
假设在授权处理程序中有一个要评估的规则存储库,并且该存储库已在服务集合中注册。 授权解析该存储库并将其注入构造函数。
例如,若要使用 .NET 日志记录基础结构,请将 ILoggerFactory 注入到处理程序中,如以下示例所示:
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;
}
}
可以使用任何服务生存期注册前面的处理程序。 以下代码使用 AddSingleton 注册前面的处理程序:
builder.Services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
应用启动时,将创建一个处理程序实例,并且 DI 将已注册的 ILoggerFactory
注入到构造函数中。
注意
不要将使用实体框架 (EF) 的授权处理程序注册为单一实例。
在使用依赖项注入进行配置过程中,必须在服务集合中注册授权处理程序。
假设在授权处理程序中有一个要评估的规则存储库,并且该存储库已在服务集合中注册。 授权解析该存储库并将其注入构造函数。
例如,若要使用 .NET 日志记录基础结构,请将 ILoggerFactory 注入到处理程序中,如以下示例所示:
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;
}
}
可以使用任何服务生存期注册前面的处理程序。 以下代码使用 AddSingleton 注册前面的处理程序:
services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();
应用启动时,将创建一个处理程序实例,并且 DI 将已注册的 ILoggerFactory
注入到构造函数中。
注意
不要将使用实体框架 (EF) 的授权处理程序注册为单一实例。