Скажем, у нас есть сервис (стиль 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+
одновременно, потому что мне нужно решить эту проблему в обоих из них.Это относится не только к декораторам, но и к любому неинъекционному контексту класса.