一. 控制反转和依赖注入:
- 控制反转的前提, 是依赖倒置原则, 系统架构时,高层模块不应该依赖于低层模块,二者通过抽象来依赖 (依赖抽象,而不是细节)
- 如果要想做到控制反转(IOC), 就必须要使用依赖注入(DI), 也就是说控制反转是要实现的目的, 而依赖注入是达到这种目的的一种技术手段
- DI依赖注入, 在构造对象时,可以自动的去初始化当前需要构造的这个对象所需要的资源, 将其依赖的所有资源自动全部初始化, 有三种形式, 通过构造函数注入, 通过属性注入 通过方法注入(依赖注入的三种方式)
- 有了依赖注入,才可能做到无限层级的依赖抽象,才能做到控制反转
二. 一个简单的容器雏形, 部分代码示例:
a) 这里相当于UI, 可以看做是高层
1 //全部都依赖细节 2 AndroidPhone phone = new AndroidPhone(); //这边的细节类, 可以看做是低层 3 //左边依赖于抽象, 但是右边还是在依赖细节 4 IPhone phone = new AndroidPhone(); 5 //左边依赖于抽象, 右边交给工厂 6 // 高层本来是依赖低层,但是可以通过工厂(容器)来决定细节,去掉了对低层的依赖, 这就是IOC控制反转:把高层对低层的依赖,转移到第三方决定,避免高层对低层的直接依赖(是一种目的) 7 IPhone phone = ObjectFactory.CreatePhone();//容器的雏形