Angular 6提供了 - 如何自定义@Injectable()提供程序以进行依赖注入?

时间:2018-05-23 13:14:23

标签: angular dependency-injection angular-module

在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 {}

1 个答案:

答案 0 :(得分:12)

我需要做两件事。

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

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

其次,将提供者指令添加到抽象类中:

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

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

归功于Abinesh FAQ,导致我this comment。非常感谢博客作者!