지연로딩모듈은 모듈이 사용될때 로딩되기 때문에 모듈에 등록된 프로바이더는 최상위모듈 인젝터에서 인식할 수 없기때문에 해당 모듈에서만 사용이 가능하다.
지연로딩되는 모듈에 생성된 인젝터가 등록하는 모든 프로바이더는 최상위 인젝터에도 등록되며, 지연로딩모듈에 있는 컴포넌트에서 서비스주입요청될 때는 최상위 인젝터 대신 해당 모듈 인젝터가 서비스 인스턴스를 생성하여 주입한다.
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'any',
})
export class UserService {
}
일반로딩모듈인경에는 싱글턴패턴으로 작동하지만 지연로딩모듈인경우에는 해당 모듈 인젝터가 인스턴스를 생성하여 주입한다.
@Component({
/* . . . */
providers: [UserService]
})
컴포넌트에 프로바이더를 설정하면 서비스는 컴포넌트와 하위컴포넌트에서만 사용가능하다.