Typescript 环回4-无法从使用@inject.tag()注入的类数组中获取元数据
将几个类注册为服务: 处理器('some_值')) 导出类MyService{} @处理器(“另一个_值”) 导出类另一个服务{} 此服务由processor()装饰器装饰,定义如下:Typescript 环回4-无法从使用@inject.tag()注入的类数组中获取元数据,typescript,loopbackjs,loopback4,Typescript,Loopbackjs,Loopback4,将几个类注册为服务: 处理器('some_值')) 导出类MyService{} @处理器(“另一个_值”) 导出类另一个服务{} 此服务由processor()装饰器装饰,定义如下: const PROCESSOR\u CLASS\u META=MetadataAccessor.create< 一串 阶级装饰家 >('processor-decorator-metadata'); 导出函数处理器(值):类装饰器{ 返回( 目标:函数&{value?:string}, ) => { 绑定({t
const PROCESSOR\u CLASS\u META=MetadataAccessor.create<
一串
阶级装饰家
>('processor-decorator-metadata');
导出函数处理器(值):类装饰器{
返回(
目标:函数&{value?:string},
) => {
绑定({tags:'processor'})(目标);
const decorator=ClassDecoratorFactory.createDecorator(
处理器\u类\u元,
价值
{decorName:'@processor'},
);
装饰师(目标);
};
}
decorator做两件事-将类标记为“processor”,并设置字符串
类型元数据
现在我有第三种服务。在此服务中,我注入了所有标记为“processor”的服务,如下所示:
导出类消费者服务{
建造师(
@inject.tag('处理器')
私有只读处理器类:构造函数,
)
}
当我试图获取注入类的元数据时,我得到了未定义的:
导出类消费者服务{
建造师(
@inject.tag('处理器')
私有只读处理器类:构造函数,
)
公共getMetaData(){
返回此.processorClass.map((processorClass)=>{
//返回未定义的
返回MetadataInspector.getClassMetadata(
处理器\u类\u元,
处理器类,
);
})
}
}
只有当我使用@inject.tag()decorator注入绑定数组时,undefined
才会出现。
当我只注入其中一个类时,我得到了预期的结果:
导出类消费者服务{
建造师(
@inject('services.MyService')
私有只读myService:myService,
)
//按预期返回“某些值”。
公共getMetaData(){
返回MetadataInspector.getClassMetadata(
处理器\u类\u元,
这是我的服务,
);
}
}
装饰程序@inject.tag()
正在注入服务实例,而不是类。您可以通过.constructor
属性访问类(构造函数)
以下是您的ConsumerService
实现的固定版本:
class ConsumerService {
constructor(
@inject.tag('processor')
private readonly processors: object[],
) {
console.log('processors', this.processors);
for (const proc of this.processors) {
console.log(
it.constructor.name,
MetadataInspector.getClassMetadata(
PROCESSOR_CLASS_META,
proc.constructor,
),
);
}
}
}
当我使用您的示例处理器运行它时,我得到以下输出:
processors [ MyService {}, AnotherService {} ]
MyService some_value
AnotherService another_value