nest.js中的自定义可注入

时间:2018-09-30 09:48:23

标签: typescript dependency-injection nestjs

我创建了一个简单的日志记录服务,该服务在幕后通过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');
    /* ... */
  }
}

我将如何实现这样的目标?

1 个答案:

答案 0 :(得分:0)

@nestjs/typeorm的{​​{1}}注入通过为每个注册实体添加单独的DI提供程序令牌来起作用-有关提供程序逻辑,请参见@nestjs/typeorm providers。该逻辑会迭代每个已注册的@InjectRepository()并为每个生成并添加令牌提供者。

要执行与您的示例相似的类似操作,您将需要能够识别并生成每种类型的令牌和关联的提供程序,并将它们作为参数传递给@Entity