0

.NET 코어에는 Transient, ScopedSingleton의 세 가지 수명이 있습니다. 체인 된 종속성 주입의 수명

는이 전 depencency 주입 서비스의 다음 체인이 가정 해 봅시다 :

> Service C

Service A>Service B,

Service AService B 주입 의미를 (예를 들어, Service AService B에 따라 다름) 및 Service BService C 주입했다.

Service B의 수명이 Singleton이고 Service C의 수명이 Transient 인 것으로 간주합니다. Service BSingleton이므로 한 번만 생성됩니다. Service CTransient이지만 Service BSingleton이므로 Service C도 한 번 생성됩니다.

이 인수가 맞습니까? 따라서 Transient 수명을 Service C으로 설정하면 의미가 없습니다. 아니면 내가 여기서 잘못 생각하고 있니?

답변

2

여기서 설명하는 것은 일반적인 문제입니다 (Captive Dependency). 서비스 C는 소비자의 수명이 길기 때문에 포로가됩니다.

이 문제는 광범위하게 발생하며 종속성 삽입 및 DI 컨테이너를 사용하는 응용 프로그램의 일반적인 버그 소스입니다. 응용 프로그램이 커지면 이러한 문제는 쉽게 감지되지 않을 수 있습니다. 경험에 비추어 볼 때, 그러한 잘못된 구성으로 버그를 추적하면 많은 시간이 걸릴 수 있습니다.

.NET Core의 기본 제공 컨테이너는 이러한 종류의 실수를 감지하고 예방하지 않습니다. .NET을위한 다른 좀 더 성숙한 DI 라이브러리는 실제로 이러한 종류의 잘못된 구성을 탐지하고 방지하는 이러한 종류의 기능을 갖추고 있습니다.

+0

설명해 주셔서 감사합니다. – Froodooo