인프런 커뮤니티 질문&답변

형주님의 프로필 이미지
형주

작성한 질문수

[C#/.NET 7.0]어서와, WPF는 처음이지?

Dependency Injection

Dependency Injection 커리큘럼 수강 중 문의 드립니다.

해결된 질문

작성

·

204

1

아래의 생성자가 호출이 되던데, 어떤 원리에 의해서 아래의 생성자가 호출이 되는 걸까요?

dateTime을 매개변수로 하여 호출하는 곳이 없는 것 같은데...

원리가 궁금합니다..

 

public DashboardViewModel(IDateTime dateTime)

{

this._idateTime = dateTime;

}

답변 1

1

RAZOR님의 프로필 이미지
RAZOR
지식공유자

형주님 안녕하세요! 늦은 시간까지 열심히 수강 중이시네요!

저도 자려던 참에 질문 올라온 것 보고 헐레벌떡 컴퓨터 앞에 앉았습니다!

 

의존성 주입이 처음에 어렵고 이해하기 막연한 부분이 있습니다 ㅠ____ㅠ 천천히 설명해드리자면!
DashboardViewModel 생성자는 Dependency Injection(DI)을 사용하고 있습니다! Dependency Injection은 객체가 직접 필요로 하는 의존성을 만들어내는 것이 아니라, 외부에서 주입받는 형식의 디자인 패턴이죠 ㅎㅎ

15:00 이후를 보시면 ConfigureServices에 아래 부분이 보이실까요?
★ services.AddSingleton<DashboardViewModel>();

서비스 컨테이너에 "DashboardViewModel"이 등록되어 있습니다.

 

따라서 애플리케이션이 시작될 때 서비스 컨테이너가 'DashboardViewModel' 인스턴스를 생성하면서 해당 매개변수에 필요한 의존성을 주입하게 됩니다. 이때, IDateTime 타입의 서비스를 찾아서 주입하게 되며, 그 서비스는 DateTimeService 인스턴스일 것입니다. 실제로 주입 후, 조사식을 통해 객체를 보면 DateTimeService 인스턴스가 할당되어 있습니다.

★ services.AddSingleton<IDateTime, DateTimeService>();

 

정리하자면, 서비스 컨테이너가 DashboardViewModel 인스턴스를 생성한다 -> 생성할 때 보니 IDateTime 인터페이스를 매개변수로 갖는다? -> 의존성을 주입해야 하기 때문에 등록된 서비스 중에서 IDateTime 인터페이스를 구현한 서비스를 찾는다 -> 등록된 걸 보니 DateTimeService 여서 그걸 주입하여 this._idateTime에 할당한다. -> DashBoardViewModel은 이제 IDateTime 인터페이스를 "통해" 외부에서 제공받은 객체(서비스)를 사용할 수 있게 된다 😃

 

설명이 잘 되었을까요?! 뒷 부분까지 천천히 수강 하시다보면 점차 이해되실 것 같습니다! 질문은 언제든 환영이니 궁금한 점이 생기면 바로바로 질문 올려주세요! 열공 그만하시고 얼른 주무세요ㅠㅠ! 감사합니다~!

 

형주님의 프로필 이미지
형주
질문자

친절하고 자세한 답변 너무 감사합니다 !

이해가 된 것 같습니다 ~ 끝까지 열심히 들어볼게요 !

RAZOR님의 프로필 이미지
RAZOR
지식공유자

아자아자 파이팅! 응원합니다~~!!

형주님의 프로필 이미지
형주

작성한 질문수

질문하기