Мне нужно, чтобы некоторые службы 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()
подходом в первую очередь? Как вы пишете модули, чтобы в зависимости от переключателя времени выполнения они производили разные службы?