【问题标题】:nestjs can't inject dependency in custom decoratornestjs 无法在自定义装饰器中注入依赖项
【发布时间】:2022-08-13 21:11:43
【问题描述】:

在有关authorization 的官方文档中,我遵循本指南并使用casl lib

假设我要验证请求man是一篇文章的所有者,我必须从数据库中获取文章数据,并在userarticle.userId之间比较userId,所以我必须注入一个像这样的存储库依赖

@Injectable()
export class DeleteHolePolicyHandler implements IPolicyHandler {
  @Inject()
  private readonly treeholeDaoService: TreeholeDaoService

  async handle(ability: AppAbility, req: Request) {
    const hole = await this.treeholeDaoService.findById(req.body.id)

    return res
  }
}

但我遇到了一个错误,它告诉我this.treeholeDaoService 是未定义的。

那么我应该怎么做才能让它工作呢?

这是reproduce link

    标签: node.js typescript nestjs casl


    【解决方案1】:

    您不能注入依赖项,因为它是使用 new 声明的就地属性。如docs 所述:

    由于我们必须使用 new 关键字就地实例化策略处理程序,ReadArticlePolicyHandler 类不能使用依赖注入。这可以通过ModuleRef#get 方法解决(阅读更多here)。基本上,您必须允许传递Type<IPolicyHandler>,而不是通过@CheckPolicies() 装饰器注册函数和实例。然后,在您的守卫内部,您可以使用类型引用检索实例:moduleRef.get(YOUR_HANDLER_TYPE),甚至可以使用 ModuleRef#create 方法动态实例化它。

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 2016-10-20
      • 2021-12-30
      • 1970-01-01
      • 2014-08-11
      • 2020-03-23
      • 2020-06-30
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多