ASP.NET Core에서 요구 사항 처리기의 종속성 주입Dependency injection in requirement handlers in ASP.NET Core

권한 부여 처리기는 구성 중 서비스 컬렉션에 등록되어야 합니다(종속성 주입 사용).Authorization handlers must be registered in the service collection during configuration (using dependency injection).

권한 부여 처리기 내부에서 평가해야 하는 규칙의 리포지토리가 존재하며, 해당 리포지토리가 서비스 컬렉션에 등록되어 있다고 가정해보겠습니다.Suppose you had a repository of rules you wanted to evaluate inside an authorization handler and that repository was registered in the service collection. 그러면 권한 부여가 이 종속성을 해결해서 생성자에 주입하게 됩니다.Authorization will resolve and inject that into your constructor.

예를 들어, 처리기에서 ASP.NET의 로깅 인프라를 사용하려면 처리기에 ILoggerFactory를 주입해야 합니다.For example, if you wanted to use ASP.NET's logging infrastructure you would want to inject ILoggerFactory into your handler. 이 경우, 처리기의 코드는 다음과 같을 수 있습니다.Such a handler might look like:

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()를 이용해서 처리기를 등록합니다:You would register the handler with services.AddSingleton():

services.AddSingleton<IAuthorizationHandler, LoggingAuthorizationHandler>();

그러면 응용 프로그램이 시작될 때 처리기의 인스턴스가 생성되고, DI가 등록된 ILoggerFactory를 생성자에 주입합니다.An instance of the handler will be created when your application starts, and DI will inject the registered ILoggerFactory into your constructor.

참고

Entity Framework를 사용하는 처리기는 싱글톤(singleton)으로 등록하면 안됩니다.Handlers that use Entity Framework shouldn't be registered as singletons.