요구사항 처리기와 의존성 주입
권한부여 처리기는 구성 과정 중, 서비스 컬렉션에 등록되어야 합니다
(의존성 주입을 이용해서).
권한부여 처리기 내부에서 평가하고자 하는 규칙들의 리파지터리가 존재하고, 해당 리파지터리는 서비스 컬렉션에 등록되어 있다고 가정해보겠습니다.
이 경우, 권한부여가 의존성을 해결해서 생성자에 주입시켜줍니다.
가령, 권한부여 처리기에서 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를 사용하는 권한부여 처리기는 싱글톤으로 등록하면 안됩니다.