Dotnet 6 Scrutor (Auto Scan And Register Library)

  1. 서론
    Dotnet 6 에서는 의존성 문제를 해결 하기 위해서

    자체적인 Dependency Injection system 을 이용한다. 
    (AddTransient, AddScoped, AddSingleton) 

    그러나 이러한 System 상의 DI만으로는 다양한 의존성 문제를 
    해결하기 어려울 수 있다.
        
    그래서 이러한 문제들을 해결 하기 위한 3rd party library 들이 존재한다. 
    (Autofac, SimpleInjector, etc ...)

    이중에서 dotnet 자체적인 DI 시스템을 이용하여 customizing 된 library 인 Scrutor 에 대해서 알아보자

  2. Scrutor
    Microsoft.Extensions.DependencyInjection용 어셈블리 스캔 및  확장



  3. 설치 및 Test
    1. dotnet add package Scrutor
    2. Program.cs 이동 아래 추가
      








    3. 사용 (ScrutorController.cs 추가)
      
  4. Scan and Register Rule
    1. IMyService 를 구현한 class 가 여러가지 라면 구현된 code 위치에 따라 지정되는 걸로 판단된다.. (정확하지는 않다. alphanumeric 기준은 아니다.)
      즉 IMyService 를 구현한 MyService, ZMyService, AMyService 가 있고
      한 파일 안에 구현되었다면 파일의 가장 마지막에 구현되어 있는 class 를 
      자동으로 injection 해온다. (??????????)

    2. 위와 같은 경우 자신이 원하는 class 를 가져오기 어렵기 때문에
      해결하는 두가지 방법이 있다.
      1. IEnumerable<IMyService> 로 감싼 후 원하는 것을 find 한다. 
      2. IMyService 를 Filtering 하기 위해 IMyService 를 확장 한다. 

    3. IEnumerable<IMyService> 를 이용할 경우



    4. IMyService Interface 를 확장 할 경우

      아래와 같이 IMyService 확장



              아래와 같이 ScrutorController 변경

               
              


관련 영상
              

댓글

이 블로그의 인기 게시물

Mediator

ASPNET 6 Web Api Basic Tutorial 1 / 2 (Swagger, SeriLog, MediatR, EntityFrameworkCore, Scrutor)

Dependency Injection Customization