我在标记为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},
]


这也可以在同一模块中使用。

10-08 08:30