我有一个使用AOT编译的Angular项目。我希望能够根据配置动态地注册
当我使用AOT编译时,问题在于我总是得到相同的服务。我期望在按F5时获得不同的服务(因为第一行有随机性)。当没有使用AOT编译时,它的行为符合我的期望。
这里是github上完整的代码示例: https://github.com/vdolek/angular-test/tree/aot-conditioned-provider-problem。它在使用
我该如何实现这一点?我知道我可以使用
ClassProvider
。我使用的简化代码如下:const isMock = Math.random() > 0.5;
@NgModule({
// ...
providers: [
{ provide: MyServiceBase, useClass: (isMock) ? MyServiceMock : MyService },
],
bootstrap: [AppComponent]
})
export class AppModule { }
当我使用AOT编译时,问题在于我总是得到相同的服务。我期望在按F5时获得不同的服务(因为第一行有随机性)。当没有使用AOT编译时,它的行为符合我的期望。
这里是github上完整的代码示例: https://github.com/vdolek/angular-test/tree/aot-conditioned-provider-problem。它在使用
ng serve
和ng serve --aot
时表现不同。我该如何实现这一点?我知道我可以使用
FactoryProvider
,但那样我就必须复制服务依赖项(工厂函数的参数和FactoryProvider
中的deps属性)。
deps
属性甚至在构建时都没有静态检查,因此当有人更改服务的依赖项时,他必须知道更改deps
属性。 - Martin Volek