Skip to content

循环依赖问题

啥是循环依赖

Module 之间可以相互 imports,Provider 之间可以相互注入,这两者都会形成循环依赖。

存在循环依赖, 启动时候会报错

为什么呢?

因为 Nest 创建 Module 的时候会递归创建它的依赖,而它的依赖又依赖了这个 Module,所以没法创建成功,拿到的就是 undefined。

解决问题

我们可以先单独创建这两个 Module,然后再让两者关联起来。 用 forwardRef 的方式,

  • 模块
ts
// Goods Module
@Module({
    imports: [
        forwardRef(()=> UserModule)
    ]
})
export class GoodsModule {}


// UserModule
@Module({
    imports: [
        forwardRef(()=>GoodsModule)
    ]
})
export class UserModule {}

Service 里可以注入别的 Service,自身也可以用来注入。 previder也一样的处理方法, 用forwardRef包一下即可

ts
// goodsService
@Injectable()
export class GoodsService {
    @Inject(forwardRef(()=>AppService))
    private readonly appService: AppService
}


// appService
@Injectable()
export class AppService {
    @Inject(forwardRef(()=>GoodsService))
    private readonly goodsService: GoodsService
}