angular - Angular 6 providedIn - 如何自定义 @Injectable() 提供程序以进行依赖注入?
问题描述
在 Angular 5 中,如果我有AbstractClassService
并且ExtendedClassService
扩展了抽象,我可以在 NgModule 的 providers 数组中执行此操作:
@NgModule({
providers: [
{provide: AbstractClassService, useClass: ExtendedClassService}
]
})
export class AppModule {}
这将使我可以ExtendedClassService
很容易地切换到另一个进行测试或其他任何事情。这仍然可以使用 Angular 6 完成,但是providedIn
可以在服务本身中设置新选项以减少包大小:
@Injectable({providedIn: 'root'})
export class ExtendedClassService extends AbstractClassService {}
有没有办法让我在使用新的 Angular 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 {}
其他提供者配置 ( useValue
, useExisting
, useFactory
) 也可以在那里使用。
这篇评论归功于 Abinesh,这让我看到了链接的博客文章。非常感谢博主!
推荐阅读
- r - 有什么方法可以将图片(.png)放在 ggplotly 工具提示中?
- html - 如何将 Angular 项目转换为非 Angular 项目?
- node.js - 在 NodeJS 中的 URL 之前添加字符串
- angular - 无法通过 routerLink 从模态重定向
- ruby-on-rails - 如何将手动将新用户添加到 Constant Contact 的 Rails 控制器重构为后台作业?
- robots.txt - robots.txt 只忽略蛞蝓
- python - 在 tkinter 接口查找特定的小部件
- c - 我的代码没有在在线 c 编译器“programiz.com”中输入字符
- python - python-telegram-bot - send_photo() 缺少 1 个必需的位置参数:'self'
- spring - 将请求负载解析为对象