Dotnet 6 Dependency Injection

2022. 1. 1. 23:33ASPNET/WebApi

반응형

종속성

클래스와 해당 종속성 간의 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 가 계속 늘어나는 것을 볼 수 있다. 
관련영상
반응형