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

등록일시: 2017-01-15 14:00,  수정일시: 2017-02-27 11:27
조회수: 425
본 번역문서는 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를 사용하는 권한부여 처리기는 싱글톤으로 등록하면 안됩니다.

COPYRIGHT © 2001-2017 EGOCUBE. ALL RIGHTS RESERVED.
Total Visit Count: 9,724,658, v1.9.0.28773 β