권한부여: 요구사항 처리기와 의존성 주입

등록일시: 2017-01-15 14:00,  수정일시: 2017-02-27 11:27
조회수: 3,544
이 문서는 ASP.NET Core 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.
본문에서는 권한부여 처리기(Authorization Handler) 자체의 의존성이 처리되는 방식을 살펴봅니다.

권한부여 처리기는 구성 과정 중, 서비스 컬렉션에 등록되어야 합니다 (의존성 주입을 통해서).

권한부여 처리기 내부에서 평가하고자 하는 규칙들의 리파지터리가 존재하고, 해당 리파지터리는 서비스 컬렉션에 등록되어 있다고 가정해보겠습니다. 이 경우, 권한부여가 의존성을 해결해서 생성자에 주입시켜줍니다.

가령, 권한부여 처리기에서 ASP.NET의 로깅 기반구조를 사용하기 위해서는 ILoggerFactory의 인스턴스를 처리기에 주입해야 합니다. 이 경우, 권한부여 처리기의 코드는 다음과 비슷할 것입니다:

public class LoggingAuthorizationHandler : AuthorizationHandler<MyRequirement>
{
    ILogger _logger;

    public LoggingAuthorizationHandler(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger(this.GetType().FullName);
    }

    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
    {
        _logger.LogInformation("Inside my handler");
        // Check if the requirement is fulfilled.
        return Task.CompletedTask;
    }
}

이 처리기는 다음과 같이 services.AddSingleton() 메서드를 이용해서 등록됩니다:

services.AddSingleton<IAuthorizationHandler, LoggingAuthorizationHandler>();

결과적으로 응용 프로그램이 시작되면 권한부여 처리기의 인스턴스가 생성되고, DI가 등록된 ILoggerFactory를 생성자에 주입해줍니다.

노트

Entity Framework를 사용하는 권한부여 처리기는 싱글톤으로 등록하면 안됩니다.