与现有提供商的角度DI注入令牌

时间:2018-04-13 07:49:44

标签: angular dependency-injection angular2-aot

有一个服务列表实现了一些 CommonInterface

const services = [Service_1, Service_2, Service_3];

我将这些服务定义为模块中的提供者

providers: [...services],

1)我想在我的组件中使用这些服务,并在每个服务上都有DI 2)我想将这些服务用作数组并在所有服务上使用DI

1对我有用,因为我创建了提供者,为2 - 我创建了一个注入令牌

export const MY_SERVICES = new InjectionToken<CommonInterface>('my.services');

并在模块i的provider部分中定义

    providers: [
       ...services,
     {
          provide: MY_SERVICES ,
          useExisting: Service_1,
          multi: true
        },
     {
          provide: MY_SERVICES ,
          useExisting: Service_2,
          multi: true
        },
     {
          provide: MY_SERVICES ,
          useExisting: Service_3,
          multi: true
        },
]

这对我来说很好,但问题是:为什么我不能这样定义我的注射令牌:

 const toInjectionToken = clazz => ({
      provide: MY_SERVICES,
      useExisting: clazz,
      multi: true
    });
providers: [ ...myServices,  ...myServices.map(toInjectionToken)]

这适用于JIT编译器,但对于AOT,它是一个错误: - NgModule的提供商无效,只允许提供商和类型的实例

如何通过更简洁的模块定义和AOT实现相同的目标?

添加了DEMO: https://stackblitz.com/edit/angular-mjvdbl

0 个答案:

没有答案