首页 > 解决方案 > 在另一个提供者中注入一个提供者,相同的模块 #1250

问题描述

我有一个服务/提供者,假设它是 call ServiceA1,在标记为 的模块 A 中@Injectable()。在同一个模块中,我有另一个服务/提供者,假设它是 call ServiceA2,标记为@Injectable()

我想注入ServiceA1ServiceA2尝试: 我的服务

此代码引发错误:serviceA1 undefined.

我的模块.ts

模块.ts

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

标签: javascriptnode.jstypescriptdependency-injectionnestjs

解决方案


如果您通过类直接注入服务,则不需要@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},
]

这也适用于同一模块。


推荐阅读