最近学习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注入原理就是这么一个过程。使用依赖注入的思想,就避免不了和接口打交道,因为接口是抽象的,继承该接口的类可以是实例化接口的方法,然后做对应的事情。