3
我需要動態配置一些Angular服務,具體取決於運行時切換。在AOT前幾天,我把它用下面的代碼工作:動態模塊/服務配置和AOT
@NgModule({
imports: [HttpModule],
providers: []
})
export class MyModule {
static forRoot(config: MyConfiguration): ModuleWithProviders {
return {
ngModule: MyModule,
providers: [
SomeService,
{
provide: SomeOtherService,
useFactory: (some: SomeService, http: Http) => {
switch (config.type) {
case 'cloud':
return new SomeOtherService(new SomethingSpecificForCloud());
case 'server':
return new SomeOtherService(new SomethingSpecificForServer());
}
},
deps: [SomeService, Http]
},
]
};
}
}
然後在我的AppModule
我會導入此爲MyModule.forRoot(myConfig)
。
當我更新CLI和Angular時,不再進行編譯,因爲它不能被靜態分析。我明白爲什麼,但我仍不確定解決問題的正確方法是什麼。
我首先濫用了這個forRoot()
方法嗎?如何編寫模塊,以便根據運行時切換器生成不同的服務?
我認爲這是唯一的選擇。 1條評論:從v4開始,你應該使用'InjectionToken'而不是'OpaqueToken'。 – mat3e