NestJS / Angular7 +如何在装饰器函数或其他不可注入的类上下文中获取服务实例

时间:2019-04-19 19:59:28

标签: angular dependency-injection nestjs

假设我们有一种服务(此处为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;
}

我同时询问NestJsAngular7+,因为我需要同时解决这两个问题。这不仅与装饰器有关,而且与任何不可注入的类上下文有关。

0 个答案:

没有答案