IoC:Inversion of Control(控制反转)
谁控制谁?
IoC容器控制对象的创建,也就是IoC容器控制对象
控制了什么?
控制了外部资源的获取(如对象、文件等)
正转和反转:
正转:如在传统应用程序里,我们主动去new对象
反转:容器创建对注入依赖对象
为什么是反转?
因为是容器帮助我们查找并注入依赖对象
DI:Dependency Injection(依赖注入)
由容器动态地将某个依赖关系注入到组件之中
依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。
谁依赖谁?
应用程序依赖容器
为什么需要依赖?
应用程序需要IoC容器来提供对象需要的外部资源
谁注入谁?
IoC容器注入应用程序某个对象,应用程序依赖的对象
注入了什么?
注入了某个对象所需要的外部资源(包括对象、资源、常量数据等)
依赖注入明确描述了被注入对象依赖IoC容器配置依赖对象
依赖注入三种方式
1.构造函数注入:在构造函数种借助参数将依赖的对象注入到创建的对象种
2.属性注入:通过添加Injection Attribute特性的方式将属性设置为自动注入属性
3.方法注入:通过调用方法实现对字段(对象)或属性(对象)的初始化
依赖原则
1.高层次模块不应该依赖于低层次模块,它们都应该依赖抽象
2.抽象不应该依赖具体,具体应该依赖抽象