Nest 循环依赖解决方案:forwardRef 的艺术

Nest 模块之间可以通过 imports 引用其他模块。

那 Module 和 Module 如果相互引用怎么办?

module 之间的循环依赖

创建一个 nest 项目:

bash 复制代码
nest new module-forward -p npm

创建两个 Module:

bash 复制代码
nest g module a
nest g module b

这种相互引用的情况就会报错。

使用 forwardRef 包装函数,该函数返回模块或提供者的引用,而不是直接引用,从而延迟了依赖项的解析:

这时候就没有报错了。

provider 循环依赖

bash 复制代码
nest g service c --no-spec --flat
nest g service d --no-spec --flat

两个 service 分别依赖了对方的方法。

这时候会报错,也是因为循环依赖导致的。

在提供者中通过 @Inject(forwardRef(() => Type)) 来注入依赖:

这样就不会报错了。

我们相互能不能正确获取结果,在 AppService 使用:

访问 localhost:3000:

没有问题。

合理的设计

  • 重新设计代码,避免循环依赖的产生是最好的做法。
  • 可以引入新的中间件、库或服务来分解复杂的依赖关系。
相关推荐
怕浪猫3 分钟前
Electron 开发实战(十):应用打包与分发|全平台打包、签名、自定义协议实战
前端·javascript·electron
Gopher_HBo5 分钟前
存储技术Redis
后端
我是伪码农8 分钟前
小程序175-200
前端·javascript·小程序
懂懂tty11 分钟前
Vue3 编译优化
前端·javascript·vue.js
低保和光头哪个先来17 分钟前
源码篇 生命周期
前端·javascript·vue.js
持敬chijing18 分钟前
Web渗透之SQL注入-盲注(布尔盲注,时间盲注)
前端·sql·oracle
xindon1218 分钟前
go语言项目部署的makefile
开发语言·后端·golang
NGINX开源社区29 分钟前
NGINX Ingress Controller 中的 Cache Policy:VirtualServer 实战指南
java·前端·nginx
办公自动化软件定制化开发python38 分钟前
开源!Edge TTS 音频转换工具 v2.1:批量文本转语音,支持段落拆分与多发音人
前端·edge·音视频
276695829241 分钟前
jd 变速滑块逆向角度分析
前端·python·京东滑块·京东逆向·京东变速滑块·cfe滑块·wasm逆向