理解IOC
概念
IOC(Inversion of Control)控制反转,又称为“依赖注入”(DI =Dependence Injection)。
这里的控制反转是指控制权由应用代码转到了外部容器。这样做可以消除应用和服务之间的耦合,将他们之间的依赖通过注入来完成,即实现了依赖注入。
发展
我们通过编码的演变逐步来看IOC。
假设有这样一个例子:类LogTxt是将日志写入文本文件。类App将使用它将日志写文本文件。
一、直接编码方式
类App直接实例化类LogTxt如下:
LogTxt lt=new LogTxt();
Lt.Write();
可是有一天,日志不再记录到文本文件,而是要写入数据库,这样增加了一个新类LogData,将以上代码修改为
LogData ld=new LogData ();
ld.Write();
如果系统有一百处,那你就需要把它们一个不漏的找出来。麻烦而且容易出错。于是开始使用工厂模式,来解决这个问题。
二、采用工厂模式
对日志记录设计一个接口,让LogTxt和LogData类实现这个接口,然后通过一个类工厂来取得实例。
这样将new提到了工厂中,你只需要修改工厂就可以改变记录的方式,但是这样还是要修改或者增加代码,于是IOC出现了。
三、采用IOC方式
如果将new的过程通过配置文件完成,那样就不需要修改代码,只需要修改配置文件即可。
我们可以通过反射来实现new的过程,那样只需要在配置文件中配置要实例化的类名称就可以了。
实现
IOC通过建立一个容器,通过这个容器来实例化类,并装配它们。容器取的了整个系统的控制权。