控制反转IOC与依赖注入DI

一、名词解释

IoC:Inverse of control,控制反转;

DI:Depedency Injection 依赖注入

IoC和DI是从不同角度描述同一件事情,即DI模式是Ioc的具体实现方式,通过引入IoC容器,利用依赖关系注入,实现对象的解耦。

二、问题引入

先来看普通的方式:



 

我们发现UserService和具体的类OracleDal,SqlserverDal紧密耦合。

如果把它进行简单的修改,那么UserService就和具体的类没有关系了,而是直接依赖于抽象。



 

那么运行时具体的类是哪个呢?这是我们就可以事先注册好一种对于关系,
先看一段Unity的代码混个眼熟:



通过解析对应关系可以知道IDal具体的类。调用时:

 



 

可见DI的目的其实就是为了减少对象间的依赖性,降低模块间的耦合度。

三、优缺点

优点:实现松耦合;

缺点:对性能有一定损失,不过现在各个产品都进行了优化升级,目前性能已经相差不会太大了。

四、IoC相关产品

Unity,Autofac,Castle,Munq,Funq,Ninject,windsor,StructMap

在后面的系列中将介绍其中几种Ioc容器。

posted @ 2012-08-22 15:17  dodo-yufan  阅读(936)  评论(0编辑  收藏  举报