Начальная загрузка углового статического провайдера не переопределяет корневой провайдер приложения - PullRequest
0 голосов
/ 11 сентября 2018

Использование Angular 6.0.3

Иметь стороннюю оболочку Azure Adal, которая импортируется в корневой модуль приложения:

@NgModule({
  imports: [
  ....
  <3rd party module>.forRoot(<configuration object here>)
  ....
  ]
})
export class AppModule {} 

[определение стороннего модуля]

@NgModule()
export class <3rd party module> {
  static forRoot(@Inject(<thing to override>) config): ModuleWithProviders {
    return {
      ngModule: <3rd party module>,
      providers: [ 
        ... 
        { provide: <thing to override>, useValue: config } 
        ... 
      ]
    }
  };
}

Конфигурация, переданная в forRoot, используется в качестве аргумента useValue для провайдера. Думаю, я мог переопределить предоставленный объект во время начальной загрузки модуля:

<fetch configuration form server>
.then(json => 
  platformBrowserDynamic(
    [ { provide: <thing to override>, useJson: json } ]
  )
  .boostrapModule(AppModule)
);

Однако для разрешения поставщиков в Angular статический провайдер должен располагаться раньше в порядке всплывающих окон, поскольку предоставленный объект всегда является одним из производных объектов конфигурации, передаваемых в декораторе NgModule на уровне приложения (т. Е. Тот, который используется в статическом forRoot вызов).

Попытался разветвить стороннюю библиотеку, добавив multi к директивам предоставления и разрешив вместо этого зависимым глотать массив. Но это тоже не работает. Директива предоставляет от статического провайдера, когда начальная загрузка полностью игнорируется (т.е. никогда не добавляется в мульти-массив).

Есть идеи?

...