例子:

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之后的效果:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

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. java 打电话_第四十二篇----拨打电话
  2. android毛玻璃效果,Android 中实现毛玻璃效果
  3. 018 Android加固之实现dex加载器
  4. 关于编写性能高效的javascript事件的技术
  5. git 提交修改到github上
  6. python中DictVectorizer的使用
  7. Vue中定义全局变量与常量的各种方式详解_vue.js_脚本之家
  8. 如何摆脱「技术思维」的惯性?
  9. 阿里云发布vSphere虚拟机备份服务 ,网络带宽有限条件下依然能有效保护数据
  10. 碾压专业机构,27岁华裔小伙推出美国最准新冠预测模型
  11. python 内置函数_python的内置函数、方法
  12. mysql gtid坑_数据库mysqldump的坑
  13. Ksplice:不再重启你的Linux
  14. 程序员的一种境界【转的】
  15. 本地音乐播放器+android8.1,APlayer v1.5.6.8-15681 安卓本地音乐播放器 | 智享阁
  16. mysql ipv4转ipv6_从IPv4到IPv6过渡
  17. Mybatis多表关联查询之三表查询
  18. Vue指令之列表渲染
  19. 数字藏品指南系列第五篇:验证智能合约
  20. 百度测试实习面试记录

热门文章

  1. android 成长日记 8.Fragment学习之方法回调
  2. makefile例子《一》
  3. ado.net 插入一条数据
  4. 一个静态库框架模板: iOS Universal Framework Mk 7
  5. Android\OPhone动画分析之翻转效果
  6. STD中string的常用方法总结
  7. LPM Sprint 4-13 开发 工作总结
  8. Linux学习笔记(十五)用户和用户组
  9. PAT_B_1029 旧键盘
  10. SecureCRT同时向多个终端发送命令