
- 0133技术站
- 联系QQ:18840023
  
- QQ交流群
 
- 微信公众号
 
Angular 4 依赖注入简介
本系列教程的开发环境及开发语言:
基础知识
Angular CLI 基本使用
安装 Angular CLI (可选)
npm install -g @angular/cli
创建新的项目
ng new PROJECT-NAME
启动本地服务器
cd PROJECT-NAMEng serve
依赖注入简介
在介绍依赖注入的概念和作用前,我们先来看个例子。各位看官请睁大眼睛,我要开始 "闭门造车" 了。
示例说明
一辆车内部构造很复杂,出于简单考虑,我们就只考虑三个部分:车身、车门和引擎。接下来我们来定义各个部分。
1.定义车身类
export default class Body { }2.定义车门类
export default class Doors { }3.定义车引擎类
export default class Engine {
  start() {
    console.log('????开动鸟~~~');
  }
}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();
此时我们已经解决了上面提到的第一个问题,要解决第二个问题我们要先介绍一下依赖注入的概念。
依赖注入的概念
在软件工程中,依赖注入是种实现控制反转用于解决依赖性设计模式。一个依赖关系指的是可被利用的一种对象(即服务提供端) 。依赖注入是将所依赖的传递给将使用的从属对象(即客户端)。该服务是将会变成客户端的状态的一部分。 传递服务给客户端,而非允许客户端来建立或寻找服务,是本设计模式的基本要求。 —— 维基百科
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(); 
推荐手册