在Angular5中,如果有扩展抽象的AbstractClassServiceExtendedClassService,我可以在ngmodule的providers数组中执行此操作:

@NgModule({
  providers: [
    {provide: AbstractClassService, useClass: ExtendedClassService}
  ]
})
export class AppModule {}

这将允许我切换ExtendedClassService与另一个测试或任何非常容易。这仍然可以通过Angular 6来实现,但是可以在服务本身中设置新的providedIn选项来减少束大小:
@Injectable({providedIn: 'root'})
export class ExtendedClassService extends AbstractClassService {}

有没有办法让我在使用新的providedIn时完成与Angular5相同的任务?像这样的:
@Injectable({providedIn: 'root', provide: AbstractClassService})
export class ExtendedClassService extends AbstractClassService {}

最佳答案

我需要做两件事。
首先,在创建继承类时使用implements而不是extends,不要在那里使用providedIn键:

@Injectable() // removed providedIn
export class ExtendedClassService implements AbstractClassService {}

其次,将提供程序指令添加到抽象类:
@Injectable({providedIn: 'root', useClass: ExtendedClassService})
export abstract class AbstractClassService {}

其他提供程序配置(useValueuseExistinguseFactory)也可以在那里使用。
阿比内斯的功劳是this comment导致我the linked blog post。非常感谢博客作者!

10-02 16:24