先来说说DIP。设计模式有六大基本原则,单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开放封闭原则。DIP也就是这六大原则之一,顾名思义,DIP只是一种原则,指导性的东西,没有具体的实现。它的基本定义是:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。依赖倒置一种原则,核心思想是依赖于抽象。
控制反转(Ico)是实现DIP原则的一种设计思想,即由最初的类本身来管理依赖对象改变为外部框架来管理这些对象,使得依赖脱离类本身的控制,从而实现松耦合。实现控制反转的方式目前有依赖查找(Dependency Lookup)和依赖注入(Dependency Injection)
由上述可知,依赖注入(DI)是实现Ioc的其中一种方式,依赖注入常常会有一个Ioc容器来管理创建对象,并可以通过属性,构造器等方式将创建的对象赋值给相应的对象中。.NET中实现了这种方式的常用框架有MEF,Unity,Autofac,Spring.NET等。当然了如果没有特别复杂的需要,自己通过反射实现一个简单的DI框架也不是难事。
综合上面的描述,从DIP,Ico到DI,是抽象到具体的一个概念过程。