主题
循环依赖问题
啥是循环依赖
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
}