Используйте пользовательский ClassDecorator для внедрения зависимости в экземпляр класса - PullRequest
0 голосов
/ 01 мая 2019

Я пишу модуль для NestJS, где я хотел бы иметь пользовательский ClassDecorator, который:

  • Делает класс @Injectable
  • Вставляет зависимость вэкземпляр класса

Вот несколько строк кода, которые иллюстрируют то, что я ожидаю:

// app.module.ts

@Module({
  providers: [AppService, MyClass]
})
export class AppModule {}

// my-class.ts

@MyClassDecorator(AppService)
export class MyClass {}

// Somewhere else where MyClass is injected as `myclass`
console.log(myclass)
// MyClass { injectedThroughDecorator: AppService {} }

Я нашел в Google много ссылок на то, как реализовать пользовательские декораторы иЯ думаю, у меня все хорошо.Я также начал читать некоторые документы о reflect-metadata, так как я думаю, что отражение могло бы помочь мне достичь этого.

Следующим шагом является определение декоратора метода, который будет иметь доступ к экземпляру AppService, введенному с помощьюMyClassDecorator.

Например, предположим, что AppService реализован как EventEmitter:

@MyClassDecorator(AppService)
export class MyClass {

    @MyMethodDecorator('event')
    myDecoratedFunction(eventName: string, data: any) {
        console.log(`Hi there! I've been triggered by the AppService's ${eventName} event with ${data}`);
    }

}

Есть ли у вас какие-либо советы о том, как мне реализовать такой декоратор?Любая помощь / пример / ссылка будет принята с благодарностью.Наконец, не стесняйтесь спрашивать более подробную информацию или объяснение того, чего я пытаюсь достичь.

Спасибо, что читаете меня, Хорошего дня!

...