NestJS / Angular7 + как получить экземпляр сервиса внутри функции декоратора или другого неинъекционного контекста класса - PullRequest
0 голосов
/ 19 апреля 2019

Скажем, у нас есть сервис (стиль NestJS)

import * as I from 'ts-typedefs';
import { Injectable } from '@nestjs/common';

@Injectable()
export class MetaService {
    getTypeScriptType(classPrototype: I.Obj, propName: string | symbol): I.Class {
        return Reflect.getOwnMetadata('design:type', classPrototype, propName);
    }

}

И мы хотим определить функцию декоратора, которая выполняет некоторую логику проверки и должна использовать методы MetaService.

Как я могу использовать синглтон MetaService, созданный NestJS/Angular системой внедрения зависимостей, без ее создания вручную, поскольку MetaService может зависеть от некоторых других служб, и мы были бы вынуждены вручную создать экземплярцелое дерево зависимостей для него?

export const Validate: I.PropertyDecorator = (classOrProto, propName) => {
    const propType = /* ?metaService? */.getTypeScriptType(classOrProto, propName);
}
export class Foo {
    @Validate
    num: number;
}

Я спрашиваю о NestJs и Angular7+ одновременно, потому что мне нужно решить эту проблему в обоих из них.Это относится не только к декораторам, но и к любому неинъекционному контексту класса.

...