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 的实例注入到其构造函数中。

注释

不要将使用 Entity Framework(EF)的授权处理程序注册为单例。