繁体   English   中英

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

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

在Angular 5中,如果我使用AbstractClassServiceExtendedClassService来扩展抽象,我可以在我的NgModule的providers数组中执行此操作:

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

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

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

有我的方式来完成我有5角,而使用新的同样的事情providedIn 像这样的东西:

@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 )也可以在那里使用。

通过这条评论 ,Abinalh获得了信用,这使我进入了链接的博客文章 非常感谢博客作者!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM