Использование 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 к директивам предоставления и разрешив вместо этого зависимым глотать массив. Но это тоже не работает. Директива предоставляет от статического провайдера, когда начальная загрузка полностью игнорируется (т.е. никогда не добавляется в мульти-массив).
Есть идеи?