我有一个(可注入的,单一的)服务,可以从服务器加载配置
export class ConfigService {
//.. some properties
private static instance: ConfigService;
constructor( //.. some dependecies, including Http) {
if (ConfigService.instance) {
return ConfigService.instance;
}
ConfigService.instance = this;
}
init(){
//.. load config file from server
}
}
我在app init上运行
@NgModule({
imports: [InnerModule],
providers: [ //...
{
provide: APP_INITIALIZER,
useFactory: (config: ConfigService) => () => config.init(),
deps: [ConfigService],
multi: true
}
]
)
export class AppModule {}
现在,内部模块需要加载一个库模块,可以配置一个带有配置对象的.forRoot
调用
@NgModule({
imports: [
LibraryModule.forRoot({
colors: //.. colors provided by configuration service
})
],
})
export class InnerModule { }
问题是模块加载是在运行初始化程序之前完成的,所以我不能在那里使用配置。
有没有办法推迟模块加载,直到我可以保证配置已加载?
我基本上需要的是能够配置一个只能通过.forRoot
配置的库,其中一些数据仅在运行时可用,并且需要从服务器加载。