Nest无法解析StatusService依赖,StatusEntityRepository注入失败求助
问题原因及解决方案
你的报错核心是依赖注入的token不匹配:
- 你在
StatusService的构造函数里用了@InjectRepository(StatusEntity),这个装饰器会让Nest去寻找TypeOrm自动生成的、对应StatusEntity的默认仓库token(也就是报错里的StatusEntityRepository)。 - 但你实际要注入的是自己定义的
StatusRepository接口的实现类StatusRepositoryImpl,这个实现类在StatusPersistenceModule里是以StatusRepository为token注册的,和@InjectRepository生成的token完全不匹配,所以Nest找不到对应的依赖。
修复步骤
只需修改StatusService的构造函数装饰器,把@InjectRepository(StatusEntity)换成@Inject(StatusRepository)即可:
import { Injectable, Inject } from '@nestjs/common'; // 别忘了导入Inject import { Nullable } from 'src/common/types/nullable.type'; import { EntityCondition } from 'src/common/types/entity-condition.type'; import { StatusEntity } from './persistence/status.entity'; import { StatusRepository } from './persistence/status-repository.interface'; @Injectable() export class StatusService { constructor( @Inject(StatusRepository) // 替换此处的装饰器 private readonly statusRepository: StatusRepository, ) {} async findOne( fields: EntityCondition<StatusEntity>, ): Promise<Nullable<StatusEntity>> { return this.statusRepository.findOne(fields); } }
关于模块导入的说明
你之前的模块导入逻辑是没问题的:StatusModule导入了StatusPersistenceModule,且StatusPersistenceModule已经导出了StatusRepository,所以StatusService所在的StatusModule上下文里是能获取到这个依赖的。问题完全出在注入装饰器的使用错误,导致Nest找错了依赖的标识,和模块导入无关。
内容的提问来源于stack exchange,提问作者mmozedev
相关产品推荐
相关产品推荐

