【发布时间】:2019-06-25 14:35:27
【问题描述】:
我在一个通用库中有一个AuthModule,它需要与类似于docs 的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):
【问题讨论】:
-
使用
forwardRef()应该只是您的最后选择。你能不能把 AuthModule 分成两部分,例如AuthLoginModule由UserModule导入,ValidateAuthModule导入UserModule? -
我最终从 UserModule 中分离出登录逻辑,这与您的建议相似。谢谢你的想法。
标签: javascript node.js typescript nestjs