用@NgModule在providers定义了MyService token用useClass来提供:

MyNewService的初始化过程:

InjectionToken:

this.records: 一个巨大的map,key为injection token,

value的数据结构如下图所示:

useClass的实例化,在代码17207的record.factory方法调用里进行:


值提供者:useValue

useValue 键让你可以为 DI 令牌关联一个固定的值。 使用该技巧来进行运行期常量设置,比如网站的基础地址和功能标志等。 你也可以在单元测试中使用值提供者,来用一个 Mock 数据来代替一个生产环境下的数据服务。

一个值-提供者的值必须在指定之前定义。

这一点和其他类型的提供者不同。
其它类型的提供者都会惰性创建它们的值,也就是说只在需要注入它们的时候才创建。

类提供者:useClass

useClass 提供的键让你可以创建并返回指定类的新实例。

你可以使用这类提供者来为公共类或默认类换上一个替代实现。比如,这个替代实现可以实现一种不同的策略来扩展默认类,或在测试环境中模拟真实类的行为。

useClass 在 SAP Spartacus 里的用法举例:

{ provide: LoggerService, useClass:    DateLoggerService }

提供者使用 DateLoggerService 来满足 LoggerService。该 LoggerService 在 AppComponent 级别已经被注册。当这个组件要求 LoggerService 的时候,它得到的却是 DateLoggerService 服务的实例。

这个组件及其子组件会得到 DateLoggerService 实例。这个组件树之外的组件得到的仍是 LoggerService 实例。

更多Jerry的原创文章,尽在:“汪子熙”:

Angular 依赖注入 useClass 的实例创建位置相关推荐

  1. factorybean 代理类不能按照类型注入_彻底搞懂依赖注入(一)Bean实例创建过程

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 上一章介绍了Bean的加载过程(IOC初始化过程),加载完成后,紧接着就要用到它的依赖注入 ...

  2. Angular 依赖注入 UseClass 和 UseExisting 的区别

    例子: import { Injectable } from '@angular/core';let count = 0;@Injectable() export class MyService {s ...

  3. Angular 依赖注入 UseClass 和 UseExisting 的区别 - 一个实际的测试例子

    例子: import { Injectable } from '@angular/core';let count = 0;@Injectable() export class MyService {s ...

  4. Angular 依赖注入的学习笔记

    Angular官方文档 Specifying a provider token If you specify the service class as the provider token, the ...

  5. angular依赖注入_Angular依赖注入简介

    angular依赖注入 by Neeraj Dana 由Neeraj Dana In this article, we will see how the dependency injection of ...

  6. Angular 依赖注入学习笔记之工厂函数的用法

    网址:https://angular.institute/di We can transfer any data through our apps, transform it and replace ...

  7. Angular 依赖注入

    问题描述 初学Angular,可能对一堆注解有些懵. 我们一起通过实例来探讨Angular的依赖注入. 一路尝试 @Injectable 一个命令建的StockService,一个手动建的TestSe ...

  8. Angular依赖注入的一个例子和注入原理单步调试

    定义一个抽象服务类: export abstract class GreetingService {abstract greet(name: string): string;} 定义一个具体类实现该抽 ...

  9. 【Spring 工厂】反转控制与依赖注入、Spring工厂创建复杂对象3种方式

    反转控制与依赖注入 反转控制 与 依赖注入 反转控制(IOC Inverse of Control) 依赖注入 (Dependency Injection - DI) Spring工厂创建复杂对象(3 ...

最新文章

  1. Linux脚本关联,shell数组和关联数组
  2. leetCode C++ 49. 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
  3. 重温强化学习之无模型学习方法:时间差分方法
  4. C语言实现跳转搜索jump search算法(附完整源码)
  5. 区块链浏览器_欧科云链OKLink区块链浏览器,如何挖掘数据背后的价值?
  6. jQuery的对象访问函数(get,index,size,each)
  7. 腾讯云多媒体文件处理总结
  8. css插件载进去ps里面,CSS3Ps(ps图层插件)官方版
  9. uniapp-手写三级地区选择实现
  10. Swift 网络请求Moya框架简单二次封装
  11. 试分析培正强智教务系统选课卡顿的原因
  12. 【uni-app】uni-app-微信小程序项目笔记
  13. win7连接网络打印机需要输入网络密码,怎么办
  14. Sicily 1001. Alphacode
  15. Qt TableView的简单使用
  16. 招投标法、合同法、采购法
  17. 数据结构算法之子集树
  18. css鼠标滑过按钮出现flash闪光效果
  19. 【20181027T1】洛阳怀【推结论+线性筛+分解质因数+GCD性质】
  20. 卡巴斯基简体中文版相关QA(ZT)

热门文章

  1. Git使用技巧(1)-- 配置【持续更新】
  2. linux nfs服务器详解
  3. 在企业内部使用openssl创建私有CA
  4. Bonjour是什么?
  5. Linux系统/网络管理
  6. Visual Studio 2010中C++项目升级指南
  7. 机房系统(二)——【数据设定 注册 】
  8. SCA/SDO与WCF的比较
  9. java -PDF添加文本水印与图片水印
  10. Amcharts 柱状图和线形图