我创建了一个简单的日志记录服务,该服务在幕后通过debug提供调试日志记录功能,该功能可以按以下方式使用:
@Resolver('Category')
export class CategoryResolver {
private log: DebugLog;
constructor(private readonly categoryService: CategoryService, loggingService: LoggingService) {
// needs this to determine logger prefix
this.log = loggingService.getDebugLogger(this);
}
@ResolveProperty()
async mainCategory(category: Category, args, context): Promise<MainCategory> {
this.log('resolving mainCategory');
/* ... */
}
}
现在,我想通过创建类似于@InjectRepository
for @nestjs/typeorm
的@InjectLogger
装饰器来摆脱构造函数中的样板代码。基本上,我想获得能够执行此操作的步骤:
@Resolver('Category')
export class CategoryResolver {
constructor(
private readonly categoryService: CategoryService,
@InjectLogger(CategoryResolver) private readonly log: DebugLog
) { }
@ResolveProperty()
async mainCategory(category: Category, args, context): Promise<MainCategory> {
this.log('resolving mainCategory');
/* ... */
}
}
我将如何实现这样的目标?
答案 0 :(得分:0)
@nestjs/typeorm
的{{1}}注入通过为每个注册实体添加单独的DI提供程序令牌来起作用-有关提供程序逻辑,请参见@nestjs/typeorm
providers。该逻辑会迭代每个已注册的@InjectRepository()
并为每个生成并添加令牌提供者。
要执行与您的示例相似的类似操作,您将需要能够识别并生成每种类型的令牌和关联的提供程序,并将它们作为参数传递给@Entity
。