使用jector.get代替构造函数注入

时间:2018-08-03 07:06:33

标签: angular dependency-injection

这样做有什么缺点

constructor(public injector: Injector) {}

foo() {
  this.injector.get(SomeService).doStuff();
}

代替此

constructor(public service: SomeService) {}

foo() {
  this.service.doStuff();
}

除了可读性?

我有一个非常复杂的组件层次结构,它们彼此扩展,并且我想避免每次都必须扩展构造函数,例如注入4或5个服务。

1 个答案:

答案 0 :(得分:3)

这两种方法之间没有什么区别,但是每次在注入器上执行get时,都运行一个必须去查找提供的服务的函数。您可以一次调用get并将服务的引用保留在属性中

constructor(public injector: Injector) {
    this.someService = this.injector.get(SomeService);
}

但是我认为将确切的服务而不是Injector注入到构造函数中更为容易。