У меня ErrorModule (eager) настроен следующим образом:
export const CONFIG = new InjectionToken<ErrorConfig[]>('Module errors configuration.');
@NgModule({
imports: [... ]
})
export class ErrorModule {
static forRoot(config: ErrorConfig): ModuleWithProviders {
return {
ngModule: ErrorModule,
providers: [
ErrorService,
{ provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },
{ provide: CONFIG, useValue: config, multi: true }
]
};
}
static forChild(config: ErrorConfig): ModuleWithProviders {
return {
ngModule: ErrorModule,
providers: [
{ provide: CONFIG, useValue: config, multi: true }
]
};
}
}
Затем основной модуль импортирует ErrorModule
следующим образом:
@NgModule({
imports: [
ErrorModule.forRoot(ERROR_CONFIG)
], ...
Lazy загружендочерний функциональный модуль:
@NgModule({
imports: [
ErrorModule.forChild(ERROR_CONFIG_CHILD)
], ...
Я хотел бы видеть обе конфигурации ERROR_CONFIG
и ERROR_CONFIG_CHILD
, введенные в ErrorService
, определенные в ErrorModule :
@Injectable
export class ErrorService {
constructor(@Inject(CONFIG) private readonly errorConfigs: ErrorConfig[])
}
Но сервис errorConfigs
(в конструкторе) содержит только CONFIG
, определенный в core.module
- тот, который определен в функции forRoot()
(массив с одним элементом).
Модуль отложенных функцийбыл загружен и инициализирован, а ErrorModule.forChild(...)
вызвано
Имеет смысл, что ErrorService
был создан в то время, когда был доступен только токен инжекции CONFIG
основного модуля - функциональный модульеще не загружен.
Я также пытался импортировать CONFIG
, используя Angular Injector
вне конструктора (метод в ErrorService
), и результат был таким же.
const configs: any[] = injector.get(CONFIG); // returns only root CONFIG
Итак, мой вопрос: возможно ли как-то получить доступ к провайдеру?ленивый модуль в модуле приложения?(Доступ к нему в корневом инжекторе приложения?)