Angular 角度依赖注入-使用现有的T?

Angular 角度依赖注入-使用现有的T?,angular,dependency-injection,Angular,Dependency Injection,我正在编写一个非常简单的指令,它本质上让我指向另一个类实例作为提供者(不要问我为什么,我知道这很愚蠢,但这不是重点)。因此,我在提供者声明中使用了“useExisting”。这当然有效,但我不想为每一个T类都创建一个指令 有没有办法做到这一点: @Directive({ selector: '[appMyGenericDirective]', providers: [{provide: NG_VALIDATORS, useExisting: T, multi: true}] }) exp

我正在编写一个非常简单的指令,它本质上让我指向另一个类实例作为提供者(不要问我为什么,我知道这很愚蠢,但这不是重点)。因此,我在提供者声明中使用了“useExisting”。这当然有效,但我不想为每一个T类都创建一个指令

有没有办法做到这一点:

@Directive({
  selector: '[appMyGenericDirective]',
  providers: [{provide: NG_VALIDATORS, useExisting: T, multi: true}]
})
export class MyGenericDirective<T> {

}
@指令({
选择器:“[appMyGenericDirective]”,
提供者:[{provide:NG_验证器,useExisting:T,multi:true}]
})
导出类MyGenericDirective{
}

其中“T”是我想要“使用现有”的类?

嗯,HTML模板必须以某种方式指定
T
。如果不想为每个t声明一个单独的指令,可以尝试声明一个将t作为
@Input()
的指令:


(前面的代码未经测试,我有点不确定该指令或其提供程序是否先实例化。但可能值得一试)

我认为带有类型参数的指令没有意义:如果在HTML中遇到
appMyGenericDirective
属性,知道为哪个
T
实例化该指令吗?是的,我想它不能像我在示例中那样。但是,是否可以将其作为指令的参数提供?并以某种方式向用户提供这些信息:?
@Directive({
  selector: '[freakyValidator]',
  providers: [{provide: NG_VALIDATORS, useFactory: (freaky) => freaky.validator, deps:[FreakyValidatorDirective], multi: true}]
})
export class FreakyValidatorDirective {
  constructor(private injector: Injector) {}

  @Input()
  set freakyValidator(validatorClass) {
    this.validator = this.injector.get(validatorClass);
  }

  validator: Validator;
}