Typescript Nestjs:避免服务构造函数中的重复表达式
在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,
@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系统。我没有完全得到你的答案,但我明白了,谢谢。如果你能详细说明你的答案,可能是格雷蒂没有得到完美的答案,但我明白了,谢谢。如果你能详细说明你的答案,那就太好了