Dotnet 6 Dependency Injection
종속성
클래스와 해당 종속성 간의 Ioc (Inversion of Control)를 실현하는 기술로
DI (Dependency Injection) 라는 디자인 패턴을 지원한다.
종류 (서비스 수명)
Transient : 요청할 때마다 만들어 짐, 요청이 끝날때 삭제
ex) AddTransient, TryAddTransient
Scoped : 특정 범위( HTTP 요청 당 하나의 인스턴스를 생성)에서
요청할때마다 만들어짐, 요청이 끝날때 삭제
ex) AddScoped, TryAddScoped
Singleton : 처음 요청될때 한번 만들어짐
ex) AddSingleton, TryAddSingleton
예제)
public interface IMyDependency { void WriteMessage(string message); int GetCounter(); } public interface IMyDependencyScoped: IMyDependency { } public interface IMyDependencySingleton : IMyDependency { } public class MyDependency : IMyDependency, IMyDependencyScoped, IMyDependencySingleton { private readonly IApiLogger _apiLogger; private int _counter = 0; public MyDependency(IApiLogger apiLogger) { _apiLogger = apiLogger; } public void WriteMessage(string message) { _apiLogger.LogInformation(GetType().FullName + " : " + message); } public int GetCounter() { return ++_counter; } } public class MyDependency2 : IMyDependency { private readonly IApiLogger _apiLogger; private int _counter = 0; public MyDependency2(IApiLogger apiLogger) { _apiLogger = apiLogger; } public void WriteMessage(string message) { _apiLogger.LogInformation(GetType().FullName + " : " + message); } public int GetCounter() { return _counter + 2; } }
Transient Test
add Controller Constructor
컨트롤러의 아무 method 에나 다음을 추가해 본다.
_logger.LogInformation($"_myFirstDependency Counter = {_myFirstDependency.GetCounter()}"); logger.LogInformation($"_mySecondDependency Counter = {_mySecondDependency.GetCounter()}");
add program.cs
output
Scoped Test
update Controller Constructor
add program.cs
output
Singleton
같은 경우는 브라우저를 여러개 뛰워서 Test 해보면
Counter 가 계속 늘어나는 것을 볼 수 있다.
관련영상
댓글
댓글 쓰기