Angular 6 providedIn - 如何为依赖注入定制@Injectable() provider?

Angular 6 providedIn - how to customize the @Injectable() provider for dependency injection?

在 Angular 5 中,如果我有 AbstractClassServiceExtendedClassService 扩展抽象,我可以在我的 NgModule 的提供者数组中这样做:

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

这将允许我很容易地与另一个切换 ExtendedClassService 以进行测试或其他任何事情。这仍然可以使用 Angular 6 来完成,但是可以在服务本身中设置新的 providedIn 选项以减少包大小:

@Injectable({providedIn: 'root'})
export class ExtendedClassService extends AbstractClassService {}

有没有办法让我在使用新的 providedIn 时完成与 Angular 5 相同的事情?像这样:

@Injectable({providedIn: 'root', provide: AbstractClassService})
export class ExtendedClassService extends AbstractClassService {}

我需要做两件事。

首先,在创建继承class时使用implements而不是extends并且不要使用providedIn键那里:

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

其次,将提供者说明添加到摘要中 class 改为:

@Injectable({providedIn: 'root', useClass: ExtendedClassService})
export abstract class AbstractClassService {}

其他供应商配置(useValueuseExistinguseFactory)也可以在那里使用。

功劳归功于 Abinesh which led me to the linked blog post。非常感谢博主!