다음을 통해 공유


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(Entity Framework)를 싱글톤으로 사용하는 권한 부여 처리기를 등록하지 마세요.

종속성 주입을 사용하여 구성하는 동안 서비스 컬렉션에 권한 부여 처리기를 등록해야 합니다.

권한 부여 처리기 내에서 평가하려는 규칙의 리포지토리가 있고 해당 리포지토리가 서비스 컬렉션에 등록되었다고 가정합니다. 권한 부여가 처리되어 생성자에 주입됩니다.

예를 들어 .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(Entity Framework)를 싱글톤으로 사용하는 권한 부여 처리기를 등록하지 마세요.