본문 바로가기

C#

.NET에서 종속성 주입

728x90

.NET는 클래스와 해당 종속성 간의 IoC(Inversion of Control)를 실현하는 기술인 DI(종속성 주입) 소프트웨어 디자인 패턴을 지원합니다. .NET의 종속성 주입은 구성, 로깅 및 옵션 패턴과 함께 프레임워크의 기본 제공 부분입니다.

 

종속성 주입은 다음을 통해 이러한 문제를 해결합니다.

  • 인터페이스 또는 기본 클래스를 사용하여 종속성 구현을 추상화합니다.
  • 서비스 컨테이너에 종속성 등록. .NET는 서비스 컨테이너인 IServiceProvider를 기본 제공합니다. 서비스는 일반적으로 앱의 시작에 등록되고 IServiceCollection에 추가됩니다. 모든 서비스가 추가되면 BuildServiceProvider를 사용하여 서비스 컨테이너를 만듭니다.
  • 서비스가 사용되는 클래스의 생성자에 주입됨. 프레임워크가 종속성의 인스턴스를 만들고 더 이상 필요하지 않으면 삭제하는 작업을 담당합니다.

 

DI 패턴을 사용하여 작업자 서비스는

  • 구체적인 형식 MessageWriter를 사용하지 않고 구현되는 IMessageWriter 인터페이스만 사용합니다. 따라서 작업자 서비스를 수정하지 않고도 작업자 서비스에서 사용하는 구현을 쉽게 변경할 수 있습니다.
  • MessageWriter의 인스턴스를 만들지 않습니다. 인스턴스는 DI 컨테이너에 의해 만들어집니다.

 

다음 수명 중 하나를 사용하여 서비스를 등록할 수 있습니다.

  • Transient - 항상 다르며, 서비스를 검색할 때마다 새 인스턴스가 만들어집니다.
  • Scoped - 새 범위에서만 변경되지만 범위 내에서는 동일한 인스턴스입니다.
  • Singleton - 항상 동일하며 새 인스턴스는 한 번만 만들어집니다.

 

종속성 주입을 위한 서비스를 디자인하는 경우

  • 상태 저장 정적 클래스 및 멤버를 사용하지 마세요. 대신 싱글톤 서비스를 사용하도록 앱을 설계하여 전역 상태를 만들지 않도록 합니다.
  • 서비스 내의 종속 클래스를 직접 인스턴스화하지 마세요. 직접 인스턴스화는 코드를 특정 구현에 결합합니다.
  • 서비스를 작고 잘 구성되고 쉽게 테스트할 수 있도록 만듭니다.

 

[출처]
https://learn.microsoft.com/ko-kr/dotnet/core/extensions/dependency-injection

728x90