依赖倒置:依赖抽象,而不依赖具体实现。

控制反转(Inversion of Control):提倡实现松耦合层、组件和类的设计原则,颠倒程序的控制流程。IoC使用分离执行特定问题处理代码的概念;

IoC意味着将你设计好的对象交给容器控制,而不是在你的对象内部直接控制,由IOC容器来控制对象的创建;

通过IoC,消除组件或者模块间的直接依赖;.Net Framework建立在控制反转的思想基础上;强调控制权的反转,体现控制流程的依赖倒置;

控制:  IOC容器控制了对象, 主要控制了外部资源获取(不只是对象包括比如文件等);

正转: 由我们自己在对象中主动控制去直接获取依赖对象;

反转: 由容器来查找/创建及注入依赖对象,对象只是被动的接受依赖对象;

IoC容器: 帮对象找相应的依赖对象并注入,而不是由对象主动去找。把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合;

IOC中最基本的技术就是“反射(Reflection)”编程,通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象,这种编程方式可以让对象在生成时才被决定到底是哪一种对象。.Net中NHibernate、Spring.NET框架都是把”反射“做为最基本的技术手段。

控制反转主要由两种类型实现:依赖注入(Dependency Injection,DI)和依赖查找(Dependency Lookup)。

依赖注入(dependency injection):组件之间依赖关系由容器在运行期决定,即由容器动态的(根据上下文环境)将某个依赖关系注入到组件之中依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

体现了“做什么”和“怎么做”的关注点分离,依赖注入体现了对实例生命周期(特别是实例创建)和组件装配的关注点分离;

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”:

谁依赖于谁:当然是应用程序依赖于IoC容器

为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源

谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象

注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。

依赖注入(传递依赖关系)的常见三种方式:

接口注入(interface injection):将对象间的关系转移到一个接口,以接口注入控制;

接口注入是现在不甚提倡的一种方式,因为它强制被注入对象实现不必要的接口,带有侵入性。利用反射机制达到创建服务类;

构造器注入(Constructor injection):客户类在类型构造时,将服务类实例以构造函数参数的形式传递给客户类,服务类实例一旦注入将无法更改;

属性注入(Setter injection):通过客户类属性设置的方式,将服务器类实例在运行时设定为客户类属性;

在客户类中设置一个服务类接口类型的数据成员,并设置一个Set方法作为注入点,这个Set方法接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员。

.Net特有的 Attribute注入:

服务定位(service location):

转载于:https://www.cnblogs.com/ctddjyds/p/5850851.html

控制反转(IOC)模式相关推荐

  1. 浅析Spring——控制反转IoC

    目录 1. IoC理论推导 2. 什么是IoC? 3. 引入DI 4. IoC容器 5. 注入对象的四种方法 1.基于接口 2.基于setter 3.基于构造函数 4.基于注解 6. 两种IoC实现方 ...

  2. 庖丁解牛Nop:控制反转--IOC和DI

    IOC中文名被称作控制反转(Inversion of Control),DI被称为依赖注入(Dependency Injection); 使用控制反转开发模式是先开发接口,然后再实现类.这种方法却可以 ...

  3. 控制反转IOC与依赖注入DI

    为什么80%的码农都做不了架构师?>>>    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最 ...

  4. 前端解读控制反转(IOC)

    前言 随着前端承担的职责越来越重,前端应用向着复杂化.规模化的方向发展.大型项目模块化是一种趋势,不可避免模块之间要相互依赖,此外还有很多第三方包.这样的话如何去管理这些繁杂的文件,是一个不可避免的话 ...

  5. PHP依赖注入(DI)和控制反转(IoC)详解

    这篇文章主要介绍了PHP依赖注入(DI)和控制反转(IoC)的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 首先依赖注入和控制反转说的是同一个东西,是一种设计模式,这种设计模式用来减少程 ...

  6. 控制反转(IoC)与依赖注入(DI)详解

    文章目录 什么是控制反转(IoC) 控制反转(IoC)有什么作用 控制反转(IoC)是怎么分类的 依赖注入 接口注入 Setter方法注入 构造器注入 依赖查找 上下文依赖查找(Contextuali ...

  7. 依赖倒置(DIP),控制反转(IoC)与依赖注入(DI)

    DIP,IoC与DI概念解析 依赖倒置 DIP(Dependency Inversion Principle) DIP的两大原则: 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象. 2.抽象不 ...

  8. 控制反转(Ioc)和依赖注入(DI)

    控制反转IOC, 全称 "Inversion of Control".依赖注入DI, 全称 "Dependency Injection". 面向的问题:软件开发 ...

  9. 控制反转 java_控制反转( Ioc)快速入门

    2.1 什么是控制反转(IOC:Inverse of Control) IOC反转控制,实际上就是将对象的创建权交给了Spring,程序员无需自己手动实例化对象. 可以看出来工厂的作用就是用来解耦合的 ...

  10. ioc控制反转_深入理解依赖注入(DI)和控制反转(IOC)

    转载本文务必须注明出处.微信号(Yemeir_com).以及添加原文链接. 为什么要使用依赖注入 使用依赖注入(DI)可以使控制者与抽象实现者松耦合,便于单元测试.通过控制反转(IOC)的设计原理来减 ...

最新文章

  1. python右对齐格式化输出_python笔记-格式化输出(%和format的用法)
  2. 6/12 Sprint2 看板和燃尽图
  3. 在Brackets中使用jsHint遇到的问题
  4. 程序员有成立工会的理由吗?
  5. 正则校验 4位数字_推荐收藏,工作中常用的正则表达式总结
  6. ORACLE数据库与Navicat安装 随手笔记
  7. uniapp 跳转外部链接
  8. C# Devexpress控件详细安装攻略
  9. Linux工控主板的多通道高速并行采集方案(基于libiio)
  10. 润了!大龄码农从北京到荷兰的躺平生活
  11. 从ARM处理器,看“贵云黔芯”国产自主安全解决方案
  12. 让古天乐心动的这位女星,鼻子塌却美得风华绝代
  13. PTA - 数据库合集54
  14. 经典WEB项目之宠物商店(一)
  15. Pandas学习笔记之时间序列总结
  16. XBox 360 Kinect 体感游戏时代,宅男再也虐不了电脑了
  17. 安卓融云SDK的使用,会话列表,1v1发起单聊
  18. 如何利用计算机解决定量问题,管理运筹学解决实际问题的步骤及内容.doc
  19. 匠诚致远,中通服创立科技为美好生活赋能添彩
  20. Rust中的dyn关键字

热门文章

  1. 安装搭建kafka集群
  2. 线程间通信的两种方式
  3. Kaggle入门,看这一篇就够了
  4. (0004) iOS 开发之CocoaPods 升级过程
  5. 数字建模matlab,Matlab基础及数学建模.ppt
  6. CSS基础学习-7.CSS元素分类
  7. 卷积神经网络要点解析
  8. php循环语句for while do while的用法
  9. php面向对象面试题
  10. redhat及deban系列linux软件管理的一些问题