本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

What is Inversion of Control?

我知道依赖注入(DI)是什么(我想!).基本上是满足对象可能具有的依赖关系。我试着想想当使用DI作为面向服务的时候我写的代码,我把我的代码定义为使用其他服务。

然而,我现在想知道,在使用IOC时,我们到底是在改变对什么的控制。这是一个相当模糊的术语,可能意味着一些事情。

但是,我认为创建由IOC框架处理的对象(并因此满足使用DI的依赖性)是有责任的。

应用程序仍然有责任要求它使用的对象(即服务),区别在于它不知道(或不关心)如何创建它。那么,为什么服务定位器被认为是反模式的,如果它所做的一切都是请求服务?

我说得对吗?或者是其他什么意思。另外,我是否正确地将DI和IOC的职责分开了?如果我有一个IOC框架,就不能在没有DI框架的情况下运行。或者DI只是IOC框架的一个特性?

看:什么是控制反转?另请参见:为什么我需要一个IOC容器而不是直接的DI代码?

我认为你提供的第一个链接回答问题的方式不对

依赖注入通常意味着将依赖对象作为参数传递给方法,而不是让方法创建依赖对象。它在实践中的含义是,方法不直接依赖于特定的实现;任何满足需求的实现都可以作为参数传递。

控制反转只认识到依赖关系是反转的。A不是通过创建、实现或直接调用B来依赖B,而是接收B作为参数,并且不再以任何方式对B负责。

将参数类型实现为接口简化了过程,并将其概括,但这并不是严格必要的。

控制反转是一种普遍的模式。依赖注入就是这种模式的一种用法。有关更多信息,本文由MartinFowler撰写,特别是标题为"控制反转"的部分。

现在很多人都避免使用DI的"控制反转"一词,因为反转与人们在依赖注入变得普遍之前所做的事情相比较。如果你现在已经习惯了依赖注入,或者是从一开始就有足够幸运地这么想的人之一,那么试图弄清楚被反转的是什么只是令人困惑。

啊哈-事实上现在更有意义了。这是一个相对的术语,一旦你改变了使用依赖注入的心态,那么"反转"就不再意味着什么了。在我开始使用Castle Windsor之前,我已经使用依赖注入很长一段时间了。当时,它只是为了使编写单元测试更容易。

控制反转基本上意味着应用程序代码不关心它需要的部分来自何处。

您可以通过各种类型的依赖注入来实现IOC。

与Java世界中的情况相反,包装器可能通过JNDI按名称请求资源。在这种情况下,代码要求它的需求,而不是提供它。

您说"应用程序仍然有责任要求它使用的对象(即服务),区别在于它不知道(或不关心)如何创建它。"

我不认为这是真的;组件不要求其他组件。依赖关系是从更高的层次注入的,这是一种不同的语义。这就是国际奥委会。

php 设计模式 控制反转,关于设计模式:控制反转究竟是什么相关推荐

  1. 【简译】关于依赖反转原则、控制反转和依赖注入的抽象的初学者指南

    原文在此. ======================================分割线==================================== 介绍 文章以介绍依赖反转原则开始 ...

  2. 计算机通过变频器模拟输入控制电机正反转,用电脑控制的工频高压系统

    IEC-243-1规定, 电压上升率的选择要使受试材料击穿发生在一定耐压时间内.否则须马上以一定速率升压, 直到击穿为止.本系统在传统的工频试验装置基础上, 采取微机控制, 在 WIN98 平台上用V ...

  3. 89c52单片机控制两个步进电机正反转加减速(程序+仿真)

    89c52单片机控制两个步进电机正反转加减速(程序+仿真) 先上图: 源代码: /*********************************************************** ...

  4. c语言写plc程序正反转,西门子PLC控制电机正反转编程实例!

    原标题:西门子PLC控制电机正反转编程实例! 实训基地:深圳坪山总部,深圳沙井分校区. 生产设备常常要求具有上下.左右.前后等正反方向的运动,这就要求电动机能正反向工作,对于交流感应电动机,一般借助接 ...

  5. 基于STM32控制直流电机加减速正反转设计

    本设计基于STM32控制直流电机加减速正反转设计(程序+仿真+论文) 仿真:proteus8.9 程序编译器:keil 5 编程语言:C语言 编号C0011 资料下载链接 功能说明: 本设计由STM3 ...

  6. 西门子V20变频器和200Smart通讯程序 使用MODBUS通讯控制变频器正转,反转,停止

    西门子V20变频器和200Smart通讯程序. 硬件配置有:西门子ST2O一台,威伦触摸屏TK607OiQ一台,V2O变频器一台,三相220∨小电机一个. 程序功能介绍:使用MODBUS通讯控制变频器 ...

  7. VSM Studio uln2003驱动步进电机+单按键启保停正反转八拍控制

    VSM Studio uln2003驱动步进电机+单按键启保停正反转八拍控制 Proteus仿真演示 基于51单片机,步进电机采用8节拍控制 VSM Studio代码 /* Main.c file g ...

  8. 51单片机+步进电机控制正反转8拍控制+Proteus仿真

    51单片机+步进电机控制正反转8拍控制+Proteus仿真 更新内容(2022年5月2日) 调整了Proteus仿真接线问题, 程序代码 急停放在了外部中断0里面实现. #include<reg ...

  9. 初中级程序员进阶高级程序员,必须要了解的设计模式(45种设计模式)

    设计模式(45种) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是 ...

最新文章

  1. vscode snippet利器
  2. python查找文件内容_python 查找文件内容
  3. [刷题]Counting Bits
  4. [2009.08.09]博客园北京俱乐部活动暨《博客园精华集:Web标准之道》现场签售通知...
  5. 学习笔记——Java
  6. spark 用户画像挖掘分析_如何基于Spark进行用户画像?
  7. linux两台服务器 同一个地址_【网工玩Linux】搭建开源多运营商(ISP)链路负载均衡器...
  8. 利用common-fileupload组件实现java上传下载
  9. HTML5网络视频webm格式制作
  10. JEB动态调试与篡改攻防世界Ph0en1x-100
  11. 概率论与数理统计---全概率、贝叶斯公式、事件独立性
  12. 人脸识别考勤机选型验收标准
  13. 微信公众号,带参二维码/推广二维码的使用
  14. java swing choice_Java-GUI基础(三)java.swing
  15. Windows桌面应用程序(1-2-4-2nd) 桌面窗口管理器
  16. ksoftirqd内核线程-处理软中断
  17. 姿态角速度和机体角速度,横摆角速度(Yaw Rate)估算
  18. 阿里云域名ICP备案操作流程
  19. #最详细# 常见服务器错误
  20. css的scal()函数使用

热门文章

  1. 学习笔记(15):Python网络编程并发编程-进程理论
  2. 韩师师范学院计算机科学与技术在哪个学区,2017年韩山师范学院本科插班生考试《数据结构》A卷...
  3. 四六级php,详解四六级查询API+网页
  4. 客服会话 小程序 如何发起_小程序、公众号、App三者如何融合布局?这里有一份避坑指南...
  5. mysql ddl dml 导出_MySQL:DDL和DML语句,弄明白了吗?
  6. python 计算器 eval ctf_CTF逆向--.NET与Python篇
  7. 小a与黄金街道(欧拉函数)/**模运算规则总结*/
  8. [补档]暑假集训D5总结
  9. windows下mongodb安装与使用整理
  10. asp.net mvc使用TagBuilder的应用程序集