首页 > 解决方案 > 在 Angular 中禁用 DI

问题描述

@Injectable()我有将在服务(可注入)类中扩展的基类(没有装饰器的常规 TS 类)。但问题是——Angular 将构造函数参数作为依赖注入。它给了我一个错误,因为基类是不可注入的。

我想要这样的东西:

class BaseClass {
  private param1: OtherBaseClass;

  constructor(param1: OtherBaseClass) {
    // Extended class should give reference to the injected service
    this.param1 = param1;
  }
}

@Injectable({ providedIn: 'root' })
class ExtendedBaseClass {
  constructor(private extendedOtherBaseClass: ExtendedOtherBaseClass) {
    super(extendedOtherBaseClass);
  }
}

当然,DI 禁用应该只影响基类,而不是整个应用程序。
那可能吗?
使基类可注入不是一种选择,因为我将无法覆盖扩展类中的方法。

标签: angularoopdependency-injection

解决方案


好的,看来我找到了答案。
我可以在没有(并且不将此类添加到模块的提供者)的情况@Injectable()下为基类设置装饰器。{ providedIn: 'root' }它允许您在基类构造函数中注入语法(将在扩展类中“覆盖”),但同时,覆盖的方法也将在扩展类中工作。


推荐阅读