Сервис углового использования, заполняемый APP_INITIALIZER в модуле @NgModule декоратора - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужно сделать среду приложения Angular независимой, поэтому я реализовал функцию в app.module.ts, которая выбирает файл конфигурации из файловой системы:

export function load(http: HttpClient, configService: ConfigService): () => Promise<boolean> {
  return (): Promise<boolean> => {
    return new Promise<boolean>(
      (resolve: (a: boolean) => void): void => {
        http
          .get('./assets/config.json')
          .pipe(
            map((config: ConfigModel) => {
              configService.config = config;
              resolve(true);
            }),
            catchError(
              (x: { status: number }, caught: Observable<void>): ObservableInput<{}> => {
                if (x.status !== 404) {
                  resolve(false);
                }
                console.log('Config file could not be loaded, thus using default configuration.');
                configService.config = configService.defaultConfig;
                resolve(true);
                return of({});
              }
            )
          )
          .subscribe();
      }
    );
  };
}

В разделе поставщиков app.module.ts Я объявляю провайдера, чтобы приложение загружало конфигурацию до запуска приложения:

providers: [
  ConfigService,
  {
    provide: APP_INITIALIZER,
    useFactory: load,
    multi: true,
    deps: [HttpClient, ConfigService]
  }
]

Использование динамически заполненного конфига в компонентах работает хорошо, просто вставив ConfigService и вызвав .config для них.

Теперь я сталкиваюсь с проблемой, когда мне нужно предоставить конфигурацию для метода forRoot() модуля в операторах импорта app.module.ts:

imports: [
  NgMsAdalModule.forRoot(## I need configService.config.adalConfig here! ##)
]

Как сделать ConfigService доступно в модуле NgModule в декораторе?

...