Angular 依赖注入 UseClass 和 UseExisting 的区别 - 一个实际的测试例子
例子:
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 的区别 - 一个实际的测试例子相关推荐
- Angular 依赖注入 UseClass 和 UseExisting 的区别
例子: import { Injectable } from '@angular/core';let count = 0;@Injectable() export class MyService {s ...
- Angular 依赖注入 useClass 的实例创建位置
用@NgModule在providers定义了MyService token用useClass来提供: MyNewService的初始化过程: InjectionToken: this.records ...
- Angular 依赖注入的学习笔记
Angular官方文档 Specifying a provider token If you specify the service class as the provider token, the ...
- angular依赖注入_Angular依赖注入简介
angular依赖注入 by Neeraj Dana 由Neeraj Dana In this article, we will see how the dependency injection of ...
- Angular 依赖注入学习笔记之工厂函数的用法
网址:https://angular.institute/di We can transfer any data through our apps, transform it and replace ...
- 马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别
马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别 http://martinfowler.com/articles/injection.html 中文翻译:http://files ...
- 依赖注入和反转控制的区别
依赖注入和反转控制的区别 写在前面,这篇文章是一个外国人写的,我还没有翻译过来,怕自己忘了,先粘到csdn上面. 原来文章的地址 One of the entertaining things abou ...
- Angular 依赖注入
问题描述 初学Angular,可能对一堆注解有些懵. 我们一起通过实例来探讨Angular的依赖注入. 一路尝试 @Injectable 一个命令建的StockService,一个手动建的TestSe ...
- Angular依赖注入的一个例子和注入原理单步调试
定义一个抽象服务类: export abstract class GreetingService {abstract greet(name: string): string;} 定义一个具体类实现该抽 ...
最新文章
- 无需多个模型也能实现知识整合?港中文MMLab提出「烘焙」算法,全面提升ImageNet性能...
- 网络推广外包——网络推广外包专员是如何发布软文外链的呢?
- Direct3D提高篇:HLSL编程实现PhotoShop滤镜效果(1)
- unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...
- java script 对象
- 三次握手和四次挥手图解_TCP三次握手和四次挥手详解
- html5画分形图形,2.5 绘制透明图形 - HTML5 Canvas 实战
- mysql 两张表差集_mysql中两张表使用left join on 求差集详解
- 马斯克说,特斯拉卡车有Mad Max狂野模式,危险的变道操作?
- POJ 1740 A New Stone Game(博弈)题解
- JavaScript高级程序设计(第3版)
- 离散数学及其应用 第一章习题
- PHP教程一环境搭建 Wampserve 下载和安装
- 3.7V和7.4V输入升压输出12V1A外围简单,8.4V升压12V1A芯片方案
- 测试人必备的工具(常用的测试平台)
- 短视频剪辑的小技巧分享,助你剪出令人印象深刻的片段,吸粉引流
- linux stubs 32.h,解决 error: gnu/stubs-32.h: No such file or directory
- Pytorch iter问题
- 【避免进程死锁】银行家算法
- 微信小程序实现本地存储