Development Tip

의존성 주입의 맥락에서 컴포지션 루트는 무엇입니까

yourdevel 2020. 11. 28. 12:34
반응형

의존성 주입의 맥락에서 컴포지션 루트는 무엇입니까


나는 의존성 주입을 탐구하고 있으며 구성 루트 라는 용어 가 모든 곳에서 사용됩니다. 그래서 그것은 무엇입니까?


컴포지션 루트는 종속성 주입 컨테이너를 사용하여 애플리케이션에 대한 개체 그래프의 구성이 발생하는 애플리케이션의 단일 위치입니다 (이 작업이 수행되는 방법은 관련이 없지만 컨테이너를 사용하거나 pure를 사용하여 수동으로 수행 할 수 있음). DI ).

이런 일이 발생하는 곳은 한 곳만 있어야하며 컨테이너는 컴포지션 루트 외부에서 사용할 필요가 없습니다.

아래 링크 된 답변 중 하나에서 인용 :

실제로 이는 애플리케이션의 루트에서 컨테이너를 구성해야 함을 의미합니다.

  • 데스크톱 앱에서는 Main 메서드에 있거나 매우 가깝습니다.
  • ASP.NET (MVC 포함) 응용 프로그램에서는 Global.asax에 있습니다.
  • WCF에서는 ServiceHostFactory에 있습니다.
  • 기타

좋은 답변이 여기에 좀 더 이것에 대해 설명합니다.

이 답변 도 참조하십시오 .


Mark Seemann은 Composition Root 디자인 패턴에 대한 훌륭한 기사를 썼습니다.

이 기사의 핵심 사항은 다음과 같습니다.

컴포지션 루트는 모듈이 함께 구성되는 응용 프로그램에서 (바람직하게는) 고유 한 위치입니다.

응용 프로그램에만 컴포지션 루트가 있어야합니다. 라이브러리와 프레임 워크는 안됩니다.

DI 컨테이너는 컴포지션 루트에서만 참조해야합니다. 다른 모든 모듈에는 컨테이너에 대한 참조가 없어야합니다.

http://blog.ploeh.dk/2011/07/28/CompositionRoot/

저는 이러한 원칙을 염두에두고 Di-Ninja라는 저만의 JavaScript Dependency Injection Framework를 작성했습니다.

https://github.com/di-ninja/di-ninja

아시다시피, javascript에서 Composition-Root 디자인 패턴을 구현하는 유일한 방법이며 문서가 작동 방식을 보여주는 또 다른 좋은 예가 될 수 있습니다.

NodeJS, 브라우저 (Webpack 또는 UMD / AMD 포함) 및 React-Native에서 작동합니다.

참고 URL : https://stackoverflow.com/questions/6277771/what-is-a-composition-root-in-the-context-of-dependency-injection

반응형