例子:

import { Injectable } from '@angular/core';let count = 0;@Injectable()
export class MyService {seed: number;_count: number;constructor(){this.seed = Number((Math.random() * 100).toFixed(0));this._count = count++;console.log('diablo constructor called: ' + this.seed);}
}

Service构造函数的断点只触发了一次:


这个单例行为在Angular DI帮助文档里有提到:

https://angular.io/guide/glossary#injector


什么时候会失去单例的特性呢?看这个例子:

import { Injectable } from '@angular/core';@Injectable()
export class MyService {seed: number;constructor(){this.seed = Number((Math.random() * 100).toFixed(0));console.log('diablo constructor called: ' + this.seed);}
}@Injectable()
export class MyNewService {seed: number;text: 'NewService';constructor(){this.seed = Number((Math.random() * 100).toFixed(0));console.log('diablo constructor called: ' + this.seed);}
}

NgModule里的定义:

表面上看,请求MyService时,也使用MyNewService进行类的实例化,似乎我们会得到MyNewService的单例。

  constructor(old: MyService, newS: MyService) {this.test();console.log('ok');}

其实不然,测试发现:我们得到了两个不同的MyNewService实例:

根据token(MyService)拿到factory(MyNewService_Factory):

第二次触发,token变成了MyNewService:

用了useExisting之后的效果:

Angular 依赖注入 UseClass 和 UseExisting 的区别 - 一个实际的测试例子相关推荐

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

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

  2. Angular 依赖注入 useClass 的实例创建位置

    用@NgModule在providers定义了MyService token用useClass来提供: MyNewService的初始化过程: InjectionToken: this.records ...

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

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

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

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

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

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

  6. 马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别

    马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别 http://martinfowler.com/articles/injection.html 中文翻译:http://files ...

  7. 依赖注入和反转控制的区别

    依赖注入和反转控制的区别 写在前面,这篇文章是一个外国人写的,我还没有翻译过来,怕自己忘了,先粘到csdn上面. 原来文章的地址 One of the entertaining things abou ...

  8. Angular 依赖注入

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

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

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

最新文章

  1. 无需多个模型也能实现知识整合?港中文MMLab提出「烘焙」算法,全面提升ImageNet性能...
  2. 网络推广外包——网络推广外包专员是如何发布软文外链的呢?
  3. Direct3D提高篇:HLSL编程实现PhotoShop滤镜效果(1)
  4. unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...
  5. java script 对象
  6. 三次握手和四次挥手图解_TCP三次握手和四次挥手详解
  7. html5画分形图形,2.5 绘制透明图形 - HTML5 Canvas 实战
  8. mysql 两张表差集_mysql中两张表使用left join on 求差集详解
  9. 马斯克说,特斯拉卡车有Mad Max狂野模式,危险的变道操作?
  10. POJ 1740 A New Stone Game(博弈)题解
  11. JavaScript高级程序设计(第3版)
  12. 离散数学及其应用 第一章习题
  13. PHP教程一环境搭建 Wampserve 下载和安装
  14. 3.7V和7.4V输入升压输出12V1A外围简单,8.4V升压12V1A芯片方案
  15. 测试人必备的工具(常用的测试平台)
  16. 短视频剪辑的小技巧分享,助你剪出令人印象深刻的片段,吸粉引流
  17. linux stubs 32.h,解决 error: gnu/stubs-32.h: No such file or directory
  18. Pytorch iter问题
  19. 【避免进程死锁】银行家算法
  20. 微信小程序实现本地存储

热门文章

  1. 计算机 英语职称免试条件,职称计算机免试条件
  2. 如何将电子签名透明化处理
  3. 日志打印利器logback的使用和配置
  4. 实时语音变声技术原理解析:“大叔变小萝莉”
  5. 根据用户名字刷账户(取用户名的字母)
  6. kal安装了tim,无法显示图片咋办
  7. ORACLE SQL常用用法
  8. 2021-09-20
  9. 电商行业特点以及理解电商的模式
  10. 抖音短连接v.douyin.com/xxx 怎么生成?