【问题标题】:Nestjs: avoid repetitive expression in constructor of serviceNestjs:避免在服务的构造函数中重复表达
【发布时间】:2021-03-31 18:26:45
【问题描述】:

在 NestJs 我有这个构造函数:

@Injectable()
export class DummyService {
  constructor(
    private readonly logger: LoggerService,
    private readonly config: ConfigService,
    private readonly session: SessionService,
    private readonly core: CoreService,
    private readonly tracking: TrackingService,
  ) {
    this.logger.setContext(this.constructor.name);
  }

}

这条线:
this.logger.setContext(this.constructor.name); ... 让我很无聊,因为每项服务都需要它。

我想添加一个装饰器 (@LogContext()) 或其他东西来避免这一行。 类似的东西:

@LogContext(LoggerService)
@Injectable()
export class DummyService {
  constructor(
    private readonly config: ConfigService,
    private readonly session: SessionService,
    private readonly core: CoreService,
    private readonly tracking: TrackingService,
  ) {}
}

但我不知道该怎么做。 注意:不能通过继承来实现,依赖注入拒绝继承。

【问题讨论】:

    标签: typescript service decorator nestjs


    【解决方案1】:

    从技术上讲,您可以使用依赖注入进行继承,在这种情况下,它不会发生太大变化。我在自定义记录器中所做的是创建一个LoggerModule.forFeature(FeatureClass.name),在其中创建一个新的注入令牌,然后使用@InjectLogger(FeatureClass.name) 注入指定的记录器。这样可以减少代码中的重复(尽管从技术上讲,元数据仍在自我复制)。

    我正在谈论的记录器包是Ogma,我确保我在开发它时考虑到了 Nest 的 DI 系统。

    【讨论】:

    • 我没有完全得到你的答案,但我明白了,谢谢。如果你能详细说明你的答案,那就太好了
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    相关资源
    最近更新 更多