假设我们有一种服务(此处为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+
,因为我需要同时解决这两个问题。这不仅与装饰器有关,而且与任何不可注入的类上下文有关。