首页 > 解决方案 > 带有延迟用户模块的身份验证模块

问题描述

我有AuthModule一个通用库,它需要与UserModule类似于文档的交互。

我想要做的是定义一个UserService必须遵守的接口而不是实际的实现。这会将实现细节留给图书馆的用户。

我尝试了几种不同的方法,例如APP_USER_SERVICE最初使用字符串标记null,然后由实现者覆盖,但这似乎在注入null值而不是注入实际值时遇到了麻烦。

我尝试过的另一种我喜欢的方法是AuthModule.withUserModule(UserModule)导入AuthModule动态UserModule并查找实现APP_USER_SERVICE定义的令牌UserModule。这种方法的问题是它似乎陷入了循环依赖地狱。

我是 NestJS 项目的新手,所以也许我遗漏了一些明显的东西。非常感谢任何有关如何组织此工作流程的指示,谢谢。

总之,这是我想要的结构:

-> = 取决于

图书馆:

AuthModule->IUserModule

用户:

AuthModule.withUserModule(UserModule)填写IUserModule要求。

UserModule->AuthModule

这是代码(损坏的atm):


示例实现

标签: javascriptnode.jstypescriptnestjs

解决方案


合作forwardRef()应该只是你最后的手段。或者,考虑将其中一个模块拆分为两个或多个部分以打破循环依赖关系,例如:

AuthModule进入

  • AuthLoginModule由 UserModule 导入
  • ValidateAuthModule导入 UserModule

或分别UserModule分成两部分。


推荐阅读