授权处理程序必须在 使用 依赖项注入的配置期间在服务集合中注册。
假设你有一个要在授权处理程序内评估的规则存储库,并且该存储库已在服务集合中注册。 授权进行处理,并将结果注入构造函数。
例如,若要使用 .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 的实例注入到其构造函数中。
注释
不要将使用 Entity Framework(EF)的授权处理程序注册为单例。