有一个服务列表实现了一些 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实现相同的目标?