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 分钟前
侦听器即watch
前端·javascript·vue.js
YAY_tyy7 分钟前
数据处理:要素裁剪、合并与简化
前端·arcgis·turfjs
自由生长20249 分钟前
nghttp2 与现代 HTTP 生态:从幕后英雄到 HTTP/2 事实标准
后端
爱吃山竹的大肚肚15 分钟前
Spring Boot 与 Apache POI 实现复杂嵌套结构 Excel 导出
java·spring boot·后端·spring·spring cloud·excel
LYFlied17 分钟前
【每日算法】LeetCode 62. 不同路径(多维动态规划)
前端·数据结构·算法·leetcode·动态规划
console.log('npc')33 分钟前
vue3文件上传弹窗,图片pdf,word,结合预览kkview
前端·javascript·vue.js·pdf·word
inferno39 分钟前
CSS 基础(第二部分)
前端·css
廋到被风吹走40 分钟前
【Spring】Spring ORM 深度解析
java·后端·spring
嘻哈baby40 分钟前
数据库连接池原理与HikariCP调优实战
后端
BD_Marathon42 分钟前
Router_路由传参
前端·javascript·vue.js