Grapeoff
@Grapeoff
В чём концепция...?

Почему мой провайдер теряет зависимости, если я вызываю его методы из его прототипа?

В моей библиотеке есть декоратор, который объединяет два декоратора: SetMetadataand Injectable.

export const EventTrackerFor = (schema: AnyClass, injectionOptions?: ScopeOptions) =>
    applyDecorators(SetMetadata('tracker-for', schema.name), Injectable(injectionOptions));

Итак, пользователь создаёт схему и трекер событий для неё:

@modelOptions({ schemaOptions: { collection: 'Tests' } })
export class SomeSchema {
  @prop()
  some_field: string;
}

@EventTrackerFor(SomeSchema)
export class AnimalTracker {
  constructor(private readonly appService: AppService) {}

  @Post(PostEvents.FIND)
  executeAfterSaving() {
    console.log(this.appService);
  }
}

И кладёт этот самый трекер событий в массив провайдеров:

@Module({
  imports: [
    KindagooseModule.forRoot(
      '...connectionUri...',
    ),
    KindagooseModule.forFeature([{ schema: SomeSchema }]),
  ],
  controllers: [AppController],
  providers: [AppService, AnimalTracker],
})
export class AppModule {}

Трекинг событий работает замечательно, но вот почему-то AppService не заинжектился, console.log выводит undefined. В чём причина такого поведения? Тут просто достаётся метод из трекера и кладётся в schema.pre или schema.post.

Возможно, эти исходники что-то прояснят:
  1. https://github.com/GrapeoffJS/kindagoose/blob/mast...
  2. https://github.com/GrapeoffJS/kindagoose/blob/mast...
  • Вопрос задан
  • 31 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы