내용

  • angular 7+ 버전부터 DI를 선언하는 새로운 방법이 생김
  • 서비스 컴포넌트 안에서 주입 대상이 될 모듈을 선언 할 수 있다

사용 패턴
서비스 객체를 컴포넌트 모듈에 주입하고 모듈 안에 선언된 뷰 컴포넌트에서 사용하면
에러가 발생한다.
왜냐하면 서비스 -> 모듈 -> 컴포넌트 -> 서비스로 이어지는 리사이클 이기 때문이다.

그렇다면 어떻게 구현해야 할까?


정답
정답은 이러하다
라우터 모듈 -> 컴포넌트 모듈 -> 서비스 모듈 -> 서비스 객체
중간에 서비스 모듈을 넣으면 된다, 물론 라우터를 이용한 lazy 로딩 일 경우 !

너무 복잡해진다... 왜 써야할까?
언제 써야 할까?


결론
provideIn

  • 모든 컴포넌트가 아닌 특정 컴포넌트에서 사용하는 용도로 적합
  • 라우터를 이용한 lazy 모듈에 적합

providers

  • module.forRoot 등의 메서드에 쓰일려면 아직까지는 providers에 선언 되어야함

참고자료

https://medium.com/@tomastrajan/total-guide-to-angular-6-dependency-injection-providedin-vs-providers-85b7a347b59f