Dotnet 6 Dependency Injection
2022. 1. 1. 23:33ㆍASPNET/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
![](https://blog.kakaocdn.net/dn/bYmMxs/btrpu7aaKIE/0dqnhkTSkCFjm30oBrztwK/img.png)
컨트롤러의 아무 method 에나 다음을 추가해 본다.
_logger.LogInformation($"_myFirstDependency Counter = {_myFirstDependency.GetCounter()}");
logger.LogInformation($"_mySecondDependency Counter = {_mySecondDependency.GetCounter()}");
add program.cs
![](https://blog.kakaocdn.net/dn/RuMfc/btrpvTpbw6L/zMfSBuxGkqOoRkSCokDow0/img.png)
output
![](https://blog.kakaocdn.net/dn/du0wT7/btrpivDhPGj/qIfRYOPxFwfMOthFGEhgz1/img.png)
Scoped Test
update Controller Constructor
![](https://blog.kakaocdn.net/dn/b3IDKr/btrpus6FFYX/ovcXkCXkmQ0tXRcBaKJPF1/img.png)
![](https://blog.kakaocdn.net/dn/CqTEC/btrputxMNo0/mKUkoSJYyioto54TpNreqk/img.png)
![](https://blog.kakaocdn.net/dn/cbp7MN/btrpoWUrzcD/Jp4cYaYs2BgGcl9D9svQwk/img.png)
Singleton
같은 경우는 브라우저를 여러개 뛰워서 Test 해보면
Counter 가 계속 늘어나는 것을 볼 수 있다.
관련영상
반응형
'ASPNET > WebApi' 카테고리의 다른 글
MySql 에서 schedule 처리 하기 (0) | 2024.04.15 |
---|---|
Quartz 를 이용한 schedule job 처리 (0) | 2024.04.08 |
ASPNET 6 Web Api Basic Tutorial 2 / 2 (Swagger, SeriLog, MediatR, EntityFrameworkCore, Scrutor) (0) | 2022.01.01 |
ASPNET 6 Web Api Basic Tutorial 1 / 2 (Swagger, SeriLog, MediatR, EntityFrameworkCore, Scrutor) (0) | 2022.01.01 |