The Misunderstood Dependency Injection Lifetime in .NET
- .NET의
Scoped 의존성 주입은 API 요청 외에도 메시지 처리, 백그라운드 서비스 등 다양한 시나리오에서 활용 가능합니다. 🌐
Transient는 매번 새 인스턴스를 생성하지만, Scoped는 동일한 요청 또는 사용자 정의 스코프 내에서 동일한 인스턴스를 재사용하여 일관성을 보장합니다. 🔄
Singleton 서비스(예: IHostedService)에 Scoped 서비스를 직접 주입하면 종속성 해결 오류가 발생합니다. 🚫
Singleton 컨텍스트에서 Scoped 서비스를 안전하게 사용하려면 IServiceScopeFactory를 주입해야 합니다. 🏭
IServiceScopeFactory.CreateScope()를 사용하여 각 처리 단위마다 독립적인 사용자 정의 스코프를 수동으로 생성할 수 있습니다. 🛠️
- 생성된 스코프 내에서
serviceScope.ServiceProvider.GetRequiredService<T>()를 통해 필요한 서비스를 가져오며, 해당 서비스의 종속성도 동일 스코프 내에서 해결됩니다. ✅
using 선언을 통해 스코프를 적절히 폐기하여 리소스 누수를 방지하고 메모리 효율성을 높이는 것이 중요합니다. ♻️
- 이 방법은 모든 것을
Transient로 만들거나 복잡한 팩토리를 사용하는 것보다 효율적이고 권장되는 Scoped 서비스 활용법입니다. 💡
- (프로모션)
Train Second 2주년 기념 세일이 진행 중이며, 할인 코드를 통해 강좌 및 번들을 구매할 수 있습니다. 🎁
데브허브 | DEVHUB | The Misunderstood Dependency Injection Lifetime in .NET