Angular 8 到 9,无法将服务导入到使用继承的 class

Angular 8 to 9, unable to import the service into the class that use inheritance

已将 Angular 从 v8 升级到 v9。该项目使用其 "unique" 定义事物的方式(而不是组合),例如 类 扩展基础 类 以及服务 .

例如:

export class TimeSeriesFormStrategy extends FormStrategyDruidBase {
  constructor(
    protected dashboardService: DashboardService,
    protected i18nService: I18NService,
    protected filterSelectService: FilterSelectService,
    protected formBuilder: FormBuilder
  ) {
    super(DashboardWidget.TypeEnum.TimeLines, dashboardService, i18nService, filterSelectService, formBuilder);

    this.basicSteps = [

迁移到Angular9后,得到:

为其他类似 类 获取相同类型的错误。

问题的根源似乎与尝试将服务注入使用继承的课程有关。不幸的是,在这个级别 - 如果不进行重大重构就不可能将其丢弃。

有什么方法可以处理这个错误吗?

继承链中是否存在抽象基class?奇怪的是,抽象基础组件需要有一个 @Directive() 装饰器。至少我的是自动 "upgraded" 这样的。

@Directive()
export abstract class FormStrategyDruidBase  {
  constructor(/* params here */) {
  }
}

简短的回答是:

  • 所有作为服务或用作服务的 类 都应使用 @Injectable() 装饰器进行注释。

详细答案在这里:https://github.com/angular/angular/issues/19417#issuecomment-332851205

似乎要求在 Angular 8 中是可选的,但在 Angular 9 中成为强制性要求。