Typescript Nestjs:避免服务构造函数中的重复表达式

Typescript Nestjs:避免服务构造函数中的重复表达式,typescript,service,decorator,nestjs,Typescript,Service,Decorator,Nestjs,在NestJs中,我有一个构造函数: @Injectable() export class DummyService { constructor( private readonly logger: LoggerService, private readonly config: ConfigService, private readonly session: SessionService, private readonly core: CoreService,

在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)
... 我觉得很无聊,因为每项服务都需要它

我想添加一个Decorator(@LogContext())或。。。还有一些东西可以避免这条线。 比如:

@LogContext(LoggerService)
@Injectable()
export class DummyService {
  constructor(
    private readonly config: ConfigService,
    private readonly session: SessionService,
    private readonly core: CoreService,
    private readonly tracking: TrackingService,
  ) {}
}
但我不知道怎么做。
注意:不可能通过继承实现,依赖项注入拒绝继承。

从技术上讲,可以通过依赖项注入实现继承,在这种情况下,它不会改变太多。我在自定义记录器中所做的是创建一个
LoggerModule.forFeature(FeatureClass.name)
,在这里我创建一个新的注入令牌,然后使用
@InjectLogger(FeatureClass.name)
注入指定的记录器。这样可以减少代码中的重复(尽管从技术上讲,meta仍在复制自身)


我特别提到的记录器软件包是,我确保我在开发它时考虑了Nest的DI系统。

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


我特别提到的记录器软件包是,我确保我在开发它时考虑到了Nest的DI系统。

我没有完全得到你的答案,但我明白了,谢谢。如果你能详细说明你的答案,可能是格雷蒂没有得到完美的答案,但我明白了,谢谢。如果你能详细说明你的答案,那就太好了