依赖注入的理解

    最近学习core,琢磨配置文件读取当中,对其中一些概念不是很清晰,比如依赖注入。

    什么是依赖注入,为什么要用这种形式,即它解决了什么问题。上网科普了一番之后心里有了比较清晰的答案。

    依赖是一种关系,依赖注入,就是将这种关系注入到要使用的对象里,这样做的好处是解耦!

    举个栗子:

    

Public Person{
...
public void drive(){
  Car toyota=new Car("TOYOTA");
  toyota.挂档;
  toyota.踩油门;
  toyota.打方向;
}
}

    这段代码里,Person类依赖了Car类,因此这两个类就产生了耦合,那么怎么解决这个问题呢,我们先理清下面几个概念:

    依赖倒置,即控制反转,实现依赖反转的方式是依赖注入。即,通过依赖注入可以实现控制反转。

    而依赖倒置有一个原则很重要:上层模块不应该依赖于下层模块,它们共同依赖于一个抽象;抽象不能依赖于具象,具象依赖于抽象。

    所以根据这个原则,Person里是不可以依赖Car的,做法是Person依赖于一个抽象 ICar:

    

Public Person{
private ICar car;
public Person(ICar onecar){
  car=onecar;
}
public void drive(){
  car.挂档;
  car.踩油门;
  car.打方向;
}
}

    进行注入以及调用的时候:

Toyota toyota=new Toyota();
Person boy=new Person(toyota);
boy.drive();

    以上就完成了一个简单的一个依赖注入的案例,core里Startup中的ConfigureServices注入原理就是这么一个过程。使用依赖注入的思想,就避免不了和接口打交道,因为接口是抽象的,继承该接口的类可以是实例化接口的方法,然后做对应的事情。

 

posted @ 2018-06-19 16:58  顾星河  阅读(530)  评论(0编辑  收藏  举报