我在标记为ServiceA1
的模块A中有一个服务/提供者,我们称它为@Injectable()
。
在同一模块中,我有另一个服务/提供程序,假设它称为ServiceA2
,标记为@Injectable()
。
我想在尝试使用的ServiceA1
中注入ServiceA2
:
此代码将引发错误:serviceA1 undefined
。
我的module.ts
我是否必须使另一个模块在serviceA2
中使用serviceA1
?
最佳答案
如果要直接通过类注入服务,则不需要@Inject()
:
@Injectable()
export class ServiceA2 {
constructor(private serviceA1: ServiceA1) {
}
这与:
@Injectable()
export class ServiceA2 {
constructor(@Inject(ServiceA1) private serviceA1: ServiceA1) {
}
请注意,您注入了
@Inject('ServiceA1')
而不是@Inject(ServiceA1)
。这是通过字符串令牌而不是类进行匹配的,因此无法解决。如果要通过字符串标记注入类,则需要在模块中声明提供程序,如下所示:
providers: [
ServiceA2,
{provide: 'ServiceA1', useClass: ServiceA1},
]
这也可以在同一模块中使用。