Angular 서비스의 싱글톤 기능과 달리 Angular 구성 요소 및 지시문은 일반적으로 여러 번 인스턴스화됩니다.예를 들어 Component의 선택자가 HTML 마크업에 나타날 때마다 Component의 인스턴스화가 트리거됩니다.
이러한 구성 요소 및 지침의 범위는 이름 충돌을 방지하기 위해 가져오는 NgModule로 제한됩니다. 예를 들어 두 구성 요소가 동일한 선택기를 가질 수 있습니다. Angular의 DI(Dependency Injection) 동작의 이러한 차이점 때문에 구성 요소와 지시문을 포함하는 NgModule을 구성 요소, 지시문 Providers
및 .
그러나 종속성 주입이 항상 이렇게 간단한 것은 아닙니다. 부트스트랩 프로세스 중에 모든 애플리케이션에 대한 NgModule을 사용할 수 없는 경우가 있습니다. 지연 로딩이 그러한 예입니다. NgModule이 라우팅 중에 지연 로드 되면 지연 로드된 NgModule에 등록된 providers
공급자와 해당 자식 은 부트스트랩 중에 사용할 수 없으며 이 시점에서 Angular는 등록할 수 없습니다. 따라서 경로가 로드될 때만 공급자로 추가되고 作用域
지연 로드된 NgModule 및 하위 모듈에서 시작하여 주입됩니다.
여러 지연 로드된 NgModule이 동일한 공급자를 등록하려고 하면 NgModule 트리의 각 노드가 다른 인스턴스로 종료됩니다. 루트에서 공급자를 가져옴으로써 지연 로드된 모든 NgModules가 공급자의 동일한 인스턴스를 가져오도록 하는 데 도움이 되며, 이것이 forRoot()가 그렇게 명명된 이유입니다.
소비자로서 응용 프로그램 계층에서 사용되는 라이브러리 종속성이 지연 로드된 NgModule을 필요로 하는 경우 해당 forRoot 메서드를 호출해야 합니다. 응용 프로그램의 루트에서 모듈을 가져오고 forRoot() 메서드에 등록하여 공급자를 전역으로 가져옵니다. 다른 NgModules에서는 구성 요소와 지시문을 가져와야 하는 경우 적절한 비루트 형식의 가져오기를 사용합니다.