内容简介:Angular 4 依赖注入教程之一(共八小节)
阅读须知
本系列教程的开发环境及开发语言:
依赖注入简介
在介绍依赖注入的概念和作用前,我们先来看个例子。各位看官请睁大眼睛,我要开始 "闭门造车" 了。
示例说明
一辆车内部构造很复杂,出于简单考虑,我们就只考虑三个部分:车身、车门和引擎。接下来我们来定义各个部分。
1.定义车身类
export default class Body { }
2.定义车门类
export default class Doors { }
3.定义车引擎类
export default class Engine { start() { console.log(':car:开动鸟~~~'); } }
4.定义汽车类
import Engine from './engine'; import Doors from './doors'; import Body from './body'; export default class Car { engine: Engine; doors: Doors; body: Body; constructor() { this.engine = new Engine(); this.body = new Body(); this.doors = new Doors(); } run() { this.engine.start(); } }
一切已准备就绪,我们马上来造一辆车:
let car = new Car(); // 造辆新车 car.run(); // 开车上路咯
车已经可以成功上路,但却存在以下问题:
-
问题一:在创建新车的时候,你没有选择,假设你想更换汽车引擎的话,按照目前的方案,是实现不了的。
-
问题二:在汽车类内部,你需要在构造函数中手动去创建各个部件。
为了解决第一个问题,提供更灵活的方案,我们可以重构一下已定义的汽车类,具体如下:
export default class Car { engine: Engine; doors: Doors; body: Body; constructor(engine, body, doors) { this.engine = engine; this.body = body; this.doors = doors; } run() { this.engine.start(); } }
重构完汽车类,我们来重新造辆新车:
let engine = new NewEngine(); let body = new Body(); let doors = new Doors(); this.car = new Car(engine, body, doors); this.car.run();
此时我们已经解决了上面提到的第一个问题,要解决第二个问题我们要先介绍一下依赖注入的概念。
依赖注入的概念
在 软件工程 中,依赖注入是种实现 控制反转 用于解决依赖性设计模式。一个依赖关系指的是可被利用的一种对象(即服务提供端) 。依赖注入是将所依赖的传递给将使用的从属对象(即客户端)。该服务是将会变成客户端的状态的一部分。 传递服务给客户端,而非允许客户端来建立或寻找服务,是本 设计模式 的基本要求。 —— 维基百科
看完概念是不是已经晕了,其实我们只要记住依赖注入的三种角色:使用者、服务(依赖对象)及注入器(Injector)。接下来我们马上来看一下 Angular 中依赖注入的应用。
Angular 依赖注入的应用
更新后的汽车类
@Injectable() export default class Car { constructor( private engine: Engine, private body: Body, private doors: Doors) {} run() { this.engine.start(); } };
具体应用
import { ReflectiveInjector } from '@angular/core'; let injector = ReflectiveInjector.resolveAndCreate([Car, Engine, Doors, Body]); let car = injector.get(Car); car.run();
看完上面的示例,我们前面提到的第二个问题,已经完美解决了哈。
以上所述就是小编给大家介绍的《Angular 4 依赖注入教程之一(共八小节)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- [Java并发-7]java的线程小节
- 漏洞分析连载第十四期 | 拘于小节的调用权限,函数调用权限漏洞
- Angular 4 依赖注入教程之二 组件中注入服务
- 服务端注入之Flask框架中服务端模板注入问题
- 服务器端电子表格注入 - 从公式注入到远程代码执行
- SQL注入测试技巧TIP:再从Mysql注入绕过过滤说起
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
html转js在线工具
html转js在线工具