【问题标题】:Angular2: Common dependencies in base classAngular2:基类中的常见依赖项
【发布时间】:2023-03-04 10:11:01
【问题描述】:

我有一个相当大的 Angular2 应用程序,其中包含智能组件和哑组件,其中所有智能组件都连接到消息总线:

class SomeSmartComponent {
  constructor(private messageBuss: MessageBuss) {}
}

这是非常重复的,我希望有:

class SomeSmartComponent extends SmartComponent {
  constructor()
}

即。将公共依赖项移动到父类中。我尝试了以下方法:

class SmartComponent {
  protected messageBuss: MessageBuss

  constructor() {
    let injector: Injector = Injector.resolveAndCreate([MessageBuss])
    this.messageBuss = injector.get(MessageBuss)
  }
}

问题是创建了一个新的 Injector 和一个新的 MessageBuss,我需要由根注入器创建并注入到服务层的相同 MessageBuss。

换句话说,我需要访问由根注入器创建的单例 MessageBuss,而无需在构造函数中设置它。任何帮助将不胜感激。

【问题讨论】:

  • 假设 Injector 工作正常,直接使用 DI(在构造函数中注入)看起来会更好,就像我们应该使用 ng2 一样。
  • 这样做的目的是避免重复使用 50 多个组件,这些组件都在其构造函数中显式注入相同的依赖项,并且都具有围绕该依赖项的共同功能。我查看了注入 Injector,但结果是相同的重复次数。

标签: angular angular2-services


【解决方案1】:

你至少需要注入Injector

class SmartComponent {
  protected messageBuss: MessageBuss

  constructor(injector:Injector) {
    this.messageBuss = injector.get(MessageBuss)
  }
}

class SomeSmartComponent extends SmartComponent {
  constructor(injector:Injector) {
    super.injector;
  }
}

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2017-09-17
    • 2019-06-03
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多