社区首页 >问答首页 >useClass对useExisting

useClass对useExisting
EN

Stack Overflow用户
提问于 2017-07-17 12:19:47
回答 3查看 17.9K关注 0票数 27

什么时候应该使用useExisting提供程序而不是useClass

代码语言:javascript
代码运行次数:0
复制
providers: [
{provide: Class1, useClass: Class1}, 
{provide: Class2, useExisting: Class2}]

评论:,我还没有找到确切的问题。为了获得更好的索引,我决定在这里创建这个特定的索引,尽管我找到了以下答案:

但希望有更多的真实例子

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-17 13:30:26

角为将用于实例化提供程序的提供程序创建工厂。

我通常使用下表来理解提供者类型之间的区别。

正如我们在上图中所看到的,所有的提供者都可以提供类似的useFactory。当获得提供者的实例时,角只需调用factory函数即可。

因此,对于useClass,角解析参数数组中的依赖关系,然后调用带有参数的构造函数,而对于useExisting,角获取现有解析实例并返回它。

用例:

1)不要暴露全部功能

代码语言:javascript
代码运行次数:0
复制
{ provide: PublicApi, useExisting: PrivateImpl }

{ provide: MinimalLogger, useExisting: LoggerService }

{ provide: PlatformRef, useExisting: PlatformRef_ }

{ provide: ApplicationRef, useExisting: ApplicationRef_}

{ provide: Sanitizer, useExisting: DomSanitizer },

{ provide: Compiler, useExisting: JitCompiler }

2)建树

代码语言:javascript
代码运行次数:0
复制
{ provide: Parent, useExisting: forwardRef(() => TreeViewComponent) }

3)避免循环依赖

代码语言:javascript
代码运行次数:0
复制
{ provide: BaseComponent, useExisting: forwardRef(() => MyComponent) }

4)提供公共令牌

代码语言:javascript
代码运行次数:0
复制
{ provide: NG_VALIDATORS, useExisting: ForbiddenValidatorDirective, multi: true }

{ provide: NG_VALIDATORS, useExisting: forwardRef(() => EmailValidator),  multi: true }

{ provide: NgControl, useExisting: forwardRef(() => NgModel) }

{ provide: ControlContainer, useExisting: forwardRef(() => FormGroupDirective) }

{ provide: NG_VALUE_ACCESSOR, multi: true, useExisting: MyDatePickerComponent }

如果我们用useExisting替换useClass,那么我们将注册一个新的类实例

票数 20
EN

Stack Overflow用户

发布于 2018-05-09 14:21:50

useExisting -为服务这里的例子创建参考

useClass -创建服务这里的例子的新实例

票数 39
EN

Stack Overflow用户

发布于 2017-07-17 12:29:35

通常,每个提供程序都会得到一个实例。

代码语言:javascript
代码运行次数:0
复制
{provide: Class1, useClass: Class1}, 

等价于

代码语言:javascript
代码运行次数:0
复制
Class1

使用

代码语言:javascript
代码运行次数:0
复制
{provide: Class1, useClass: Class3}, 

您可以配置,当构造函数请求Class1时,角DI创建一个Class3实例并将其传递给构造函数。

代码语言:javascript
代码运行次数:0
复制
{provide: Class2, useExisting: Class2}

不会导致创建实例,但您可以看到这一点,而不是别名。如果构造函数请求Class2,则角DI为键Class2寻找另一个提供程序,并从该Class2提供程序注入实例。您可以看到useExisting类似于对另一个提供程序或别名的引用。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45152995

复制
相关文章
Angular 依赖注入简介
在介绍依赖注入的概念和作用前,我们先来看个例子。各位同学请睁大眼睛,我要开始 “闭门造车” 了。
阿宝哥
2019/11/05
7110
Angular依赖注入详解
依赖注入的基本思想是:将组件所依赖的服务提供者注入进来,而不是在组件内部直接创建。
坑吭吭
2023/10/16
2760
Node.js服务端开发教程 (五):依赖注入进阶篇
在前一篇文章《依赖注入基础篇》中,我们了解了依赖注入和控制反转的基本概念,大致知道它是怎么一回事。并通过简单的例子,学习到了在NestJS框架下如何使用依赖注入功能。今天,我们需要再多花点时间,进一步了解更多关于使用NestJS依赖注入的功能细节。
一斤代码
2019/11/15
2.1K0
前端代码常见的 Provider 究竟是什么
不知道你有没有在某处见过 xxProvider,Provider 并不是 23 种经典设计模式之一,但是却应用特别多,可以算是一种比较新的模式。
神说要有光zxg
2021/09/03
9790
前端代码常见的 Provider 究竟是什么
前端代码常见的 Provider 究竟是什么
不知道你有没有在某处见过 xxProvider,Provider 并不是 23 种经典设计模式之一,但是却应用特别多,可以算是一种比较新的模式。
公众号@魔术师卡颂
2021/08/26
1.5K0
前端代码常见的 Provider 究竟是什么
AngularDart4.0 指南- 依赖注入 顶
依赖注入是一个重要的应用程序设计模式。 它的用途非常广泛,几乎所有人都称之为DI。
南郭先生
2018/08/14
5.7K0
使用Angular的依赖注入
Service 的表现形式是一个class,可以用来在组件中复用 比如 Http 请求获取数据,日志处理,验证用户输入等都写成Service,供组件使用。
mafeifan
2019/06/15
9990
Angular进阶教程2-<依赖注入+RxJS>
组件\color{#0abb3c}{组件}组件不应该直接获取或保存数据,它们应该聚焦于展示数据,而把数据访问和处理的职责委托给某个服务\color{#0abb3c}{服务}服务。那面对组件和服务之间的关系,该如何处理他们之间的依赖关系呢?Angular就引入了依赖注入框架\color{#0abb3c}{依赖注入框架}依赖注入框架去解决这件事情。
玖柒的小窝
2021/12/08
4.2K0
Angular进阶教程2-<依赖注入+RxJS>
点击加载更多

相似问题

角- useExisting ngForm可选

216

Angular 2 useExisting提供程序

33

角APP_INITIALIZER与useClass

10

“`deps:[]”也可以与“`useClass`”连用吗?

32

无法注入用useClass声明的角度提供程序

118
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文