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) 的授权处理程序注册为单一实例。