控制反转(IOC)模式
依赖倒置:依赖抽象,而不依赖具体实现。
控制反转(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)模式相关推荐
- 浅析Spring——控制反转IoC
目录 1. IoC理论推导 2. 什么是IoC? 3. 引入DI 4. IoC容器 5. 注入对象的四种方法 1.基于接口 2.基于setter 3.基于构造函数 4.基于注解 6. 两种IoC实现方 ...
- 庖丁解牛Nop:控制反转--IOC和DI
IOC中文名被称作控制反转(Inversion of Control),DI被称为依赖注入(Dependency Injection); 使用控制反转开发模式是先开发接口,然后再实现类.这种方法却可以 ...
- 控制反转IOC与依赖注入DI
为什么80%的码农都做不了架构师?>>> 1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最 ...
- 前端解读控制反转(IOC)
前言 随着前端承担的职责越来越重,前端应用向着复杂化.规模化的方向发展.大型项目模块化是一种趋势,不可避免模块之间要相互依赖,此外还有很多第三方包.这样的话如何去管理这些繁杂的文件,是一个不可避免的话 ...
- PHP依赖注入(DI)和控制反转(IoC)详解
这篇文章主要介绍了PHP依赖注入(DI)和控制反转(IoC)的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 首先依赖注入和控制反转说的是同一个东西,是一种设计模式,这种设计模式用来减少程 ...
- 控制反转(IoC)与依赖注入(DI)详解
文章目录 什么是控制反转(IoC) 控制反转(IoC)有什么作用 控制反转(IoC)是怎么分类的 依赖注入 接口注入 Setter方法注入 构造器注入 依赖查找 上下文依赖查找(Contextuali ...
- 依赖倒置(DIP),控制反转(IoC)与依赖注入(DI)
DIP,IoC与DI概念解析 依赖倒置 DIP(Dependency Inversion Principle) DIP的两大原则: 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象. 2.抽象不 ...
- 控制反转(Ioc)和依赖注入(DI)
控制反转IOC, 全称 "Inversion of Control".依赖注入DI, 全称 "Dependency Injection". 面向的问题:软件开发 ...
- 控制反转 java_控制反转( Ioc)快速入门
2.1 什么是控制反转(IOC:Inverse of Control) IOC反转控制,实际上就是将对象的创建权交给了Spring,程序员无需自己手动实例化对象. 可以看出来工厂的作用就是用来解耦合的 ...
- ioc控制反转_深入理解依赖注入(DI)和控制反转(IOC)
转载本文务必须注明出处.微信号(Yemeir_com).以及添加原文链接. 为什么要使用依赖注入 使用依赖注入(DI)可以使控制者与抽象实现者松耦合,便于单元测试.通过控制反转(IOC)的设计原理来减 ...
最新文章
- python右对齐格式化输出_python笔记-格式化输出(%和format的用法)
- 6/12 Sprint2 看板和燃尽图
- 在Brackets中使用jsHint遇到的问题
- 程序员有成立工会的理由吗?
- 正则校验 4位数字_推荐收藏,工作中常用的正则表达式总结
- ORACLE数据库与Navicat安装 随手笔记
- uniapp 跳转外部链接
- C# Devexpress控件详细安装攻略
- Linux工控主板的多通道高速并行采集方案(基于libiio)
- 润了!大龄码农从北京到荷兰的躺平生活
- 从ARM处理器,看“贵云黔芯”国产自主安全解决方案
- 让古天乐心动的这位女星,鼻子塌却美得风华绝代
- PTA - 数据库合集54
- 经典WEB项目之宠物商店(一)
- Pandas学习笔记之时间序列总结
- XBox 360 Kinect 体感游戏时代,宅男再也虐不了电脑了
- 安卓融云SDK的使用,会话列表,1v1发起单聊
- 如何利用计算机解决定量问题,管理运筹学解决实际问题的步骤及内容.doc
- 匠诚致远,中通服创立科技为美好生活赋能添彩
- Rust中的dyn关键字