浅谈依赖注入和控制反转

首先说下控制反转(ioc)

只把它认为思想就可以了,就像是面向对象思想,它的思想就是把引用代码的控制权,移交到外部,然后再通过外部注入进来,

举个简单的例子:

A类需要使用B类,则A类需要直接引用B类,现在我们不去直接获取了,而是通过一个容器去获取B类的实例,然后再通过容器传给A类这个过程叫注入,而这个容器则为ioc容器,它是一个能实现这种功能的框架,(angular就是一种)

依赖注入

上面介绍了控制反转, 如果明白了控制反转,那么依赖注入其实就是实现控制反转的手段,即这个容器要想实现这种功能需要通过依赖注入的方式,简单解释为应用程序依赖容器创建并注入它所需要的外部资源;

意义
为什么要这样做?
同样举个例子:

export class AExa {}
export class BExa {}
export class CExa {
  public a:AExa;
  public b:BExa;
   constructor(){
    this.a=new AExa();
    this.b=new BExa();
  }
}

要想实现实例CExa则需要在它内部构建AExa和BExa实例,
现在我们想为AExa添加一个参数》》》DExa实例,

export class AExa {
   constructor(new DExa()){
  }
}
export class BExa {}
export class CExa {
  public a:AExa;
  public b:BExa;
   constructor(){
    this.a=new AExa(new DExa());
    this.b=new BExa();
  }
}
export class DExa {}

AExa改变了,我们最终需要的CExa 也改变了,实际项目中肯定比这复杂

依赖注入方式则只关心CExa,它需要什么直接在构造函数中注入就可以
代码变为这样

export class CExa {
  public a:AExa;
  public b:BExa;
   constructor(private aMid:AExa,private bMid:BExa){
    this.a=aMid;
    this.b=bMid;
  }
}

这是angular的方式通过在构造函数中声明,来说明需要的依赖,angular已经在底层做了大量初始化工作,需要哪个注入哪个,这样做的好处是消除耦合增加可复用性

猜你喜欢

转载自blog.csdn.net/weixin_41952198/article/details/81701493