NestJS报错ResolutionService无法解析ResolutionRepository依赖该如何解决?
问题原因
你遇到的依赖注入报错是因为ResolutionRepository作为自定义Provider,没有被Nest的依赖注入容器正确识别,常见原因对应两种修复方案:
方案1:确认自定义仓库添加@Injectable装饰器
这是最常见的漏写场景,直接检查你的resolution.repository.ts文件,给类添加@Injectable()装饰器即可:
// resolution.repository.ts 示例 import { Injectable } from '@nestjs/common'; import { Repository, DataSource } from 'typeorm'; import { ResolutionEntity } from './resolution.entity'; @Injectable() // 必须添加该装饰器,Nest才能识别为可注入的Provider export class ResolutionRepository extends Repository<ResolutionEntity> { constructor(private dataSource: DataSource) { super(ResolutionEntity, dataSource.createEntityManager()); } // 你的自定义查询方法 async getAllByName(name: string): Promise<ResolutionEntity[]> { // 实现逻辑 } }
修改后重启服务即可验证是否修复。
方案2:适配TypeORM版本调整注册逻辑
如果加了装饰器依然报错,就是TypeORM版本和注册方式不匹配的问题:
如果你使用的是TypeORM 0.3.x版本
修改resolution.module.ts,把自定义仓库放到TypeOrmModule.forFeature数组中注册,不需要再放到全局providers里:
import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ResolutionEntity } from './resolution.entity'; import { ResolutionService } from './resolution.service'; import { ResolutionRepository } from './resolution.repository'; @Module({ imports: [TypeOrmModule.forFeature([ResolutionEntity, ResolutionRepository])], providers: [ResolutionService], exports: [ResolutionService], }) export class ResolutionModule {}
如果你使用的是TypeORM 0.2.x版本
需要在Service注入仓库时添加@InjectRepository()装饰器:
import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { ResolutionEntity } from './resolution.entity'; import { ResolutionRepository } from './resolution.repository'; @Injectable() export class ResolutionService { constructor( @InjectRepository(ResolutionRepository) private readonly resolutionRepository: ResolutionRepository ) {} async getAllByName(name: string): Promise<ResolutionEntity[]> { return this.resolutionRepository.getAllByName(name); } }
内容的提问来源于stack exchange,提问作者Mistral
相关产品推荐
相关产品推荐

