Angular算是将后端开发工程化引入前端的先驱之一,而Dependency injection依赖注入(后面简称为DI)又是Angular内部运作的核心功能,所以要深入理解Angular有必要先理解这一核心概念。

维基百科对依赖注入的解释?

在软件工程中,依赖注入是实现控制反转的一种软件设计模式,一个依赖是一个被其他对象(client)调用的对象(服务),注入则是将被依赖的对象(service)实例传递给依赖对象(client)的行为。将 被依赖的对象传给依赖者,而不需要依赖者自己去创建或查找所需对象是DI的基本原则。 依赖注入允许程序设计遵从依赖倒置原则(简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合) 调用者(client)只需知道服务的接口,具体服务的查找和创建由注入者(injector)负责处理并提供给client,这样就分离了服务和调用者的依赖,符合低耦合的程序设计原则。

依赖注入中的角色?

从维基百科解释可知, DI中包含三个角色,调用者(client), 服务(service)和注入者 (injector),下面开始介绍本文的主题 Angular的依赖注入。

为什么要使用依赖注入❓

我们用官网的一个小例子了解一下?

export class Car {public engine: Engine;public tires: Tires;public description = 'No DI';constructor() {this.engine = new Engine();this.tires = new Tires();}// Method using the engine and tiresdrive() {return `${this.description} car with ` +`${this.engine.cylinders} cylinders and ${this.tires.make} tires.`;}
}

我们可以看到一个Car类依赖于Engine和Tires这两个类,我们在Car的构造函数中去实例这两个依赖类。这有什么问题?如果有一天我们的Tires构造函数需要一个参数,那么我们必须要在Car的构造函数中去更改代码。

constructor() {this.engine = new Engine();this.tires = new Tires(params);}
]

这种代码是非常不灵活的。虽然我们可以进行如下结构调整

export class Car {public engine: Engine;public tires: Tires;public description = 'No DI';constructor(engine, tires) {this.engine = engine;this.tires = tires;}// Method using the engine and tiresdrive() {return `${this.description} car with ` +`${this.engine.cylinders} cylinders and ${this.tires.make} tires.`;}
}const car = new Car(new Engine(), new Tires())

这样似乎解决了不灵活的问题,但是如果依赖项很多的话,我们都要去手动创建这些实例,也不太方便。其实创建依赖实例的过程完全可以交给一个专门的’工厂’来做,这就是angular里面的Injector。

使用实例请参考:Angular4学习之依赖注入

我有话说?

书读百遍,其意自现。虽然现在还不是很明白,但是实践起来,应该就会懂了。

【Angular 4】依赖注入相关推荐

  1. Angular 4 依赖注入教程之一 依赖注入简介

    目录 Angular 4 依赖注入教程之一 依赖注入简介 Angular 4 依赖注入教程之二 组件服务注入 Angular 4 依赖注入教程之三 ClassProvider的使用 Angular 4 ...

  2. Angular 通过依赖注入机制注入一个对象的例子,什么是 ElementInjector

    假设我在app.config.ts里定义了一个interface AppConfig和一个对象HERO_DI_CONFIG, 我想将后者注入到一个类的构造函数里去: export interface ...

  3. Angular Service依赖注入的一个具体例子

    Angular service 相当于 SAP Commerce Cloud 里的 service facade. 使用如下的命令行创建Angular service: ng generate ser ...

  4. Angular 依赖注入

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

  5. 我的angularjs源码学习之旅2——依赖注入

    依赖注入起源于实现控制反转的典型框架Spring框架,用来削减计算机程序的耦合问题.简单来说,在定义方法的时候,方法所依赖的对象就被隐性的注入到该方法中,在方法中可以直接使用,而不需要在执行该函数的时 ...

  6. angularjs中的依赖注入

    这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [ angula ...

  7. Angular 中的依赖注入link

    Angular 中的依赖注入link 依赖注入(DI)是一种重要的应用设计模式. Angular 有自己的 DI 框架,在设计应用时常会用到它,以提升它们的开发效率和模块化程度. 依赖,是当类需要执行 ...

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

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

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

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

最新文章

  1. Serverless 工程实践|自建 Apache OpenWhisk 平台
  2. UNITY 复制对象后局部坐标和世界坐标的变化问题
  3. .net core连接MongoDB
  4. P5437-[XR-2]约定【拉格朗日差值,数学期望】
  5. 全国职业院校技能大赛软件测试题目,我院荣获2017年全国职业院校技能大赛软件测试赛项一等奖...
  6. 我xp电脑桌面没有计算机图标不见了,xp系统我的电脑图标不见了怎么办|如何找回我的电脑图标-系统城...
  7. 别再跟我提Excel了!这才是阿里大厂都在用的数据分析神器
  8. P1019 单词接龙
  9. Electron 使用Widevine CDM插件
  10. 马哥Linux学习笔记2-3Linux命令帮助的获取详解
  11. ubuntu 16.04 配置网络代理
  12. DNS是什么?DNS什么用?
  13. 浏览器兼容与前端性能优化集合
  14. 1189 SEARCH
  15. SkinSharp(Skin#)软件换肤库!
  16. 整数转成RGB颜色值
  17. 金融科技大数据产品推荐:金融魔方 ---专业的金融SaaS服务平台
  18. 物体跟随鼠标移动——图片为gif格式
  19. ThinkCMF图片上传
  20. Android json数据解析

热门文章

  1. 团队作业8----第二次项目冲刺(beta阶段)5.20
  2. mysql 主从不同步处理--数据库初始化
  3. JavaScript学习总结(二十)——Javascript非构造函数的继承
  4. windbg查询内存泄笔记
  5. 另一个进程已被死锁在资源上且该事务已被选作死锁牺牲品
  6. 使用 Visual Leak Detector 检测内存泄漏
  7. asp.net mvc源码分析-Action篇 Action的执行
  8. delphi透明组件(控件)开发
  9. 《大型数据库技术》MySQL的进阶开发技巧
  10. Java - 初探贪心算法(纸币找零,背包问题)