typescript 在另一个提供程序中插入提供程序,相同的模块#1250

jq6vz3qz  于 2023-03-04  发布在  TypeScript
关注(0)|答案(2)|浏览(122)

我有一个服务/提供者,我们假设它叫ServiceA1,在一个标记为@Injectable()的模块A中。在同一个模块我有另一个服务/提供者,我们假设它叫ServiceA2,标记为@Injectable()
我想将ServiceA1注入ServiceA2中,我尝试使用:

这段代码抛出一个错误:serviceA1 undefined.
我的模块. ts

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

iq0todco

iq0todco1#

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

这也适用于同一模块。

e5nqia27

e5nqia272#

任何人碰到这个:确保您记得使用@Injectable注解注入的服务。

相关问题