У меня есть проект Angular, который я компилирую с помощью AOT. Я хочу иметь возможность зарегистрировать ClassProvider
, который разрешается динамически в соответствии с конфигурацией. Я использую упрощенный код:
const isMock = Math.random() > 0.5;
@NgModule({
// ...
providers: [
{ provide: MyServiceBase, useClass: (isMock) ? MyServiceMock : MyService },
],
bootstrap: [AppComponent]
})
export class AppModule { }
Проблема в том, что когда я компилирую это с помощью AOT, я всегда получаю один и тот же сервис. Я ожидаю получить другую услугу при нажатии F5 (из-за randomness
в первой строке). При компиляции без AOT он ведет себя так, как я ожидаю.
Вот весь пример кода на github: https://github.com/vdolek/angular-test/tree/aot-conditioned-provider-problem. Он ведет себя по-разному с ng serve
и ng serve --aot
.
Как я могу этого добиться? Я знаю, что мог бы использовать FactoryProvider
, но тогда мне пришлось бы дублировать зависимости сервисов (параметры фабричной функции и свойство deps на FactoryProvider
).