依赖注入如何只注入部分参数?

时间:2016-12-18 15:23:20

标签: angular typescript dependency-injection

是否可以只注入部分构造函数参数?我想实现这样的目标:

@Injectable()
class A {
    constructor(param1: string, private param2?: SomeType){}
}


class B extends A {
    constructor(){
          super("some string value");
     }
}

1 个答案:

答案 0 :(得分:1)

添加@Optional()装饰器使其成为可选:

@Injectable()
class A {
    constructor(@Optional() param1: string, private param2?: SomeType){}
}

另见https://angular.io/docs/ts/latest/api/core/index/Optional-decorator.html

?之后的param2表示您希望此参数是可选的,但您不能拥有基本类型的强制参数(Objectstringnumberboolean)注射剂。

您可以使用@Inject(...)为提供者使用字符串键,例如:

@Injectable()
class A {
    constructor(@Inject('someName')param1: string, @Optional() private param2?: SomeType){}
}

providers: [{provide: 'someName', useValue: 'some string value'}]