在另一个提供者中注入提供者,相同的模块#1250

问题描述 投票:1回答:1

我有一个服务/提供商,让我们说它叫ServiceA1,在一个标记为@Injectable()的模块中。在同一个模块中我有另一个服务/提供者,让我们说它叫ServiceA2,标记为@Injectable()

我想在ServiceA1注入ServiceA2我尝试:

此代码抛出错误:serviceA1 undefined

我的module.ts

我是否必须制作另一个模块才能在serviceA2中使用serviceA1

javascript node.js typescript dependency-injection nestjs
1个回答
1
投票

如果您是由班级直接注入服务,则不需要@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},
]

这也适用于同一模块。

© www.soinside.com 2019 - 2024. All rights reserved.