【发布时间】:2017-05-12 23:25:59
【问题描述】:
假设我有一个 Angular 2 组件指令,我希望组件使用的注入依赖项由 @Input() 确定。
我想写<trendy-directive use="'serviceA'"> 之类的东西,让TrendyDirective 的实例使用serviceA,或者如果我指定的话,让它使用serviceB。 (这是我实际尝试做的过于简化的版本)
(如果您认为这是一个糟糕的想法,我愿意接受这种反馈,但请解释原因。)
这是一个如何实现我所想的示例。在此示例中,假设 ServiceA 和 ServiceB 是可注入的,它们都通过具有“superCoolFunction”来实现 iService。
@Component({
selector: 'trendy-directive',
...
})
export class TrendyDirective implements OnInit {
constructor(
private serviceA: ServiceA,
private serviceB: ServiceB){}
private service: iService;
@Input() use: string;
ngOnInit() {
switch (this.use){
case: 'serviceA': this.service = this.serviceA; break;
case: 'serviceB': this.service = this.serviceB; break;
default: throw "There's no such thing as a " + this.use + '!';
}
this.service.superCoolFunction();
}
}
我认为这在技术上可行,但必须有更好的方法来进行动态依赖注入。
【问题讨论】:
标签: angular typescript dependency-injection