1、对IOC和DI的理解首先说一下什么是IOC和DI,IOC是Inversion of Control(控制反转)的简写,DI是Dependency Injection(依赖注入)的简写,martinfowler对IOC的解释为:“Inversion of control is a common characteristic of frameworks, so saying that these lightweight containers are special because they use inversion of
2、 control is like saying my car is special because it has wheels.” 我想对这一概念进行一个个人的阐述,以方便我的理解。控制反转,从字面意思来看,就是控制权由被动变主动又变为被动,或被动变主动又变为被动。从这个角度来说,IOC就变得非常容易理解了。 举个例子:你的主管要求你做一件事情,这个时候就存在这么几个过程, 1、主管命令你做事情(这个时候主动权在主管,你是被动的) 2、你接到命令做事情(这个时候主题是你,你是主动的,控制权在你手里) 3、你完
3、成事情(这个时候主题依然是你,控制权在你手里) 4、报告主管做完事情(主动权又叫交到主管手里了) 上面的整个过程就完成了一次IOC,从上面可以看出,IOC的基本思想是控制权的转换过程。 举个代码的例子: 假如有Class A,Class B,在A内部会初始化一个B,调用B的一个方法DoMethod public Class B { public void DoMethod() { /// do somthing; } } public Class A { public void Excute
4、() { B b = new B(); b.DoMethod(); } } 假如在Main函数中如下执行: A a = new A(); a.Excute(); 从这两行代码来看,事实上也存在一个IOC的过程,a——>b——>a,理解的关键点就在A的内部调用Excute的时候,方法b.DoMethod的执行。理解了IOC,我们再看一下DI,从上面A调用B我们可以看出,在初始化一个A的实例时,也必须实例化一个B,也就是说如果没有B或者B出了问题,A就无法实例化,这就产生了一种依赖,就是A依赖B,这种依赖从