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
'C#' 카테고리의 다른 글
디자인 패턴 정의와 종류에 대해 (0) | 2023.01.26 |
---|---|
IoC(Inversion of Control; 종속성 반전) (0) | 2023.01.26 |
DI(의존성 주입) 사용하는 이유 (0) | 2023.01.25 |
DI(Dependency Injection, 의존성 주입) (0) | 2023.01.25 |
TableLayout에서 Label Ellipsis 사용하기 (0) | 2023.01.25 |