
Microsoft.Extensions.DependencyInjection는 .NET (특히 .NET Core / .NET 5+) 환경에서 의존성 주입(Dependency Injection, DI)을 제공하는 마이크로소프트 공식 라이브러리(네임스페이스 및 NuGet 패키지)입니다. 주 목적은 애플리케이션 구성(서비스 등록)과 런타임에서 서비스 인스턴스 제공을 단순하고 일관되게 처리하는 것입니다. 주요 구성 요소와 개념 - IServiceCollection: 서비스(종속성) 등록을 위한 컬렉션입니다. 보통 애플리케이션 시작 시 ConfigureServices나 HostBuilder에서 사용합니다. - 대표적 등록 메서드: AddSingleton, AddScoped, AddTransient, AddSingleton
() 등. - ServiceLifetime: 서비스의 수명(lifetime)을 지정합니다. - Singleton: 컨테이너 전체에서 단일 인스턴스(어플리케이션 수명과 동일). - Scoped: 하나의 범위(scope) 내에서 단일 인스턴스(웹앱의 경우 요청(request)별로 기본 scope가 생성됨). - Transient: 호출(해결)할 때마다 새 인스턴스. - IServiceProvider: 등록된 서비스들을 실제로 제공(해결)하는 객체입니다. BuildServiceProvider()로 얻을 수 있습니다. - IServiceScope / IServiceScopeFactory: 명시적 범위(scope)를 만들고 폐기하여 scoped 서비스의 수명 관리를 가능하게 합니다. - IDisposable 처리: 컨테이너는 생성한 싱글턴과 스코프가 IDisposable을 구현하면 적절히 Dispose를 호출합니다(스코프가 폐기될 때 스코프 내 스코프 서비스들 Dispose). 주요 기능/특징 - 생성자 주입(Constructor injection)을 기본으로 사용합니다. - IEnumerable 자동 주입: 동일 서비스 타입의 모든 등록을 주입 받을 수 있습니다. - 팩토리 등록, 기존 인스턴스 등록, 제네릭(open generic) 등록을 지원합니다. - 가볍고 프레임워크에 통합되어 있으며 ASP.NET Core, Generic Host와 기본적으로 연동됩니다. - 복잡한 기능(네임드 인스턴스, 고급 라이프사이클 훅 등)은 제한적이며, 필요하면 Autofac, SimpleInjector 등 서드파티 DI 컨테이너로 교체할 수 있습니다. (.NET DI는 IServiceProviderFactory를 통해 교체 가능) 사용 예시(개념적으로) - 등록: services.AddScoped(); - 해결: var provider = services.BuildServiceProvider(); var s = provider.GetService(); 권장 사용법/주의점 - 웹 요청 단위 리소스는 Scoped로, 공유 자원은 Singleton으로, 임시 객체는 Transient로 등록하세요. - BuildServiceProvider를 애플리케이션 중간에 호출해 복수의 서비스 프로바이더를 만들면 싱글턴 라이프사이클과 DI 동작에 혼란을 줄 수 있으므로 주의합니다. - 복잡한 DI 시나리오(모듈화된 등록, 고급 라이프사이클 제어 등)가 필요하면 대체 컨테이너 사용을 고려하세요. 요약하면, Microsoft.Extensions.DependencyInjection은 .NET 애플리케이션에서 의존성 주입을 표준화하고 간단히 구현하도록 돕는 공식 라이브러리로서, 서비스 등록과 인스턴스 제공을 담당하는 핵심 API들을 제공합니다.