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

Gia*_*Voß 3 dependency-injection angular

这样做有什么缺点吗

constructor(public injector: Injector) {}

foo() {
  this.injector.get(SomeService).doStuff();
}
Run Code Online (Sandbox Code Playgroud)

而不是这个

constructor(public service: SomeService) {}

foo() {
  this.service.doStuff();
}
Run Code Online (Sandbox Code Playgroud)

除了可读性之外?

我有一个相当复杂的相互扩展的组件层次结构,并且我希望避免每次都使用 4 或 5 个注入服务来扩展构造函数。

Sur*_*yan 5

这些方法之间没有区别,但是每次get在注入器上执行操作时,您都会运行一个函数,该函数必须去查找您提供的服务。您可以拨打get一次并将该服务的参考信息保留在财产中

constructor(public injector: Injector) {
    this.someService = this.injector.get(SomeService);
}
Run Code Online (Sandbox Code Playgroud)

但我认为在构造函数中注入精确的服务而不是Injector更具可读性。

  • 它与这个问题无关,但是,您能否让我知道为什么当通过注入器注入服务时循环依赖错误得到解决?谢谢! (2认同)