这样做有什么缺点
constructor(public injector: Injector) {}
foo() {
this.injector.get(SomeService).doStuff();
}
代替此
constructor(public service: SomeService) {}
foo() {
this.service.doStuff();
}
除了可读性?
我有一个非常复杂的组件层次结构,它们彼此扩展,并且我想避免每次都必须扩展构造函数,例如注入4或5个服务。
答案 0 :(得分:3)
这两种方法之间没有什么区别,但是每次在注入器上执行get
时,都运行一个必须去查找提供的服务的函数。您可以一次调用get
并将服务的引用保留在属性中
constructor(public injector: Injector) {
this.someService = this.injector.get(SomeService);
}
但是我认为将确切的服务而不是Injector
注入到构造函数中更为容易。