【发布时间】:2017-06-29 18:54:27
【问题描述】:
我需要动态配置一些 Angular 服务,具体取决于运行时开关。在 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() 方法?您如何编写模块,以便根据运行时开关产生不同的服务?
【问题讨论】:
标签: angular angular2-aot