Мне нужно, чтобы некоторые угловые службы настраивались динамически, в зависимости от коммутатора времени выполнения. В дни перед АОТ, я получил его на работу, используя следующий код:Конфигурация динамического модуля/обслуживания и 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