在 Angular 中利用 Multi Provider 实现动态切换 Service
(最后一次更新: ) 阅读需要 1 分钟
在 Angular 中能以依赖注入的方式注入 service ,一般要注入那个 service 是在 Compile-time 决定的。 如果在特殊场景中:Compile-time 还不知道要注入那个 service ,那么就要在 Runtime 利用骚操作注入 service。
示例代码
划重点
app.component.ts
26行
1
constructor(private serviceFactory: ServiceFactory) {}
30行
1
this.service = this.serviceFactory.createService(serviceName);
因为不是在 Compile-time 决定要注入那个 service,那么在 constructor
中依赖注入时应注入 ServiceFactory
,从而利用 ServiceFactory
在 Runtime 改变 service。
app.module.ts
21-24行
1
2
3
4
{ provide: ServiceToken, useClass: NullService, multi: true},
{ provide: ServiceToken, useClass: AWSService, multi: true},
{ provide: ServiceToken, useClass: AzureService, multi: true},
{ provide: ServiceToken, useClass: GcpService, multi: true}
为了让符合 ServiceInterface
的 service 在 ServiceFactory
中一次性全部注入,就要在 AppModule
的 provider 加上 multi: true
,这样所有 interface 相同的 service 将以数组的形式一次全部注入。