Typescript 环回4-无法从使用@inject.tag()注入的类数组中获取元数据

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

将几个类注册为服务:

处理器('some_值')) 导出类MyService{} @处理器(“另一个_值”) 导出类另一个服务{} 此服务由processor()装饰器装饰,定义如下:

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