【问题标题】:Auth module with deferred User module带有延迟用户模块的身份验证模块
【发布时间】:2019-06-25 14:35:27
【问题描述】:

我在一个通用库中有一个AuthModule,它需要与类似于docsUserModule 进行交互。

我想做的是定义UserService 必须遵守的接口,而不是实际的实现。这会将实现细节留给库的用户。

我尝试了几种不同的方法,例如让字符串令牌 APP_USER_SERVICE 最初为 null 然后被实现者覆盖,但这似乎在注入 null 值而不注入实际值时遇到了麻烦.

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

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

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

-> = 取决于

图书馆:

AuthModule -> IUserModule

用户:

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

UserModule -> AuthModule

这是代码(损坏的atm):

Library
Sample Implementation

【问题讨论】:

  • 使用forwardRef() 应该只是您的最后选择。你能不能把 AuthModule 分成两部分,例如AuthLoginModuleUserModule 导入,ValidateAuthModule 导入 UserModule?
  • 我最终从 UserModule 中分离出登录逻辑,这与您的建议相似。谢谢你的想法。

标签: javascript node.js typescript nestjs


【解决方案1】:

使用forwardRef() 应该是您最后的选择。或者,考虑将其中一个模块拆分为两个或多个部分以打破循环依赖关系,例如:

AuthModule进入

  • AuthLoginModule 由 UserModule 导入
  • ValidateAuthModule 导入 UserModule

或者分别将UserModule分成两部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多