以简御繁介绍IOC
1.IOC的理论背景
大家开发理念,一直都是奔着架构稳定、低耦合性。而IOC初衷,就是为了解决模块依赖问题,理解《六大设计原则(SOLID)》

如图所示,在我们开发中,业务的实现,就是靠着模块中的类与类、跨模块的类与类,相互调用与依赖完成的。而这就导致我们改动一个类,就会使得所有用到这个类的地方都要改一遍。比如把My SQL更换成SQL Server,我们不应该影响业务代码,只需要更改数据驱动的实现就行(我相信大家遇见过这种烦人的事情)
而这个时候我们就想,可不可以不由我们自己实例化,而是交给一个专门的工厂帮我们实例化(IOC的前身其实就是工厂)为了解决这个问题,软件专家Michael Mattson提出了IOC理论
2.什么是IOC
IOC(控制反转)是Inversion of Control的缩写,为了解决背景交代的问题
- 控制:首先控制实例的创建,不用我们控制具体创建什么实例,而是交给工厂,类似于第三方的概念,他和我们业务没任何关系,我们面向抽象编程,由它帮我们统一控制实例创建,改变它就所有的统一改变(完美)。
- 反转:其次对象之间依赖不能由我们去创建,我们调用的时候,不用关心被调用的类与其他类之间的依赖关系,也交给第三方去帮我们解决依赖的问题,我们只管调用。(更完美)

思路就如上图所示,但产生了另一个问题,既然调用者不关心,那当前对象所依赖的对象,怎么来,难道凭空产生?于是就有了注入这种模式的概念
3.什么是DI
DI(依赖注入)是Dependency Injection的缩写,所以他们其实是为了解决同一问题。
Martin Fowler(马丁·福勒),国际著名的OO专家,认为我们需要为该模式指定一个更具体的名称。控制反转是一个过于笼统的术语,因此人们会感到困惑。与IoC倡导者进行了大量讨论之后,决定使用依赖注入这个名称。
依赖项注入有三种主要样式,分别是:构造函数注入、属性注入、接口注入
总结
是不是没我们想的那么复杂繁琐,简单来说:其实就是一种架构思想而引生出来的一个工具。目的就是为了解耦,使架构更稳定。
其他
其他相关具体实现原理和使用方式,我就不详细介绍了,大家可以查找相关资料学习。后面我会通过代码实现一个我们自己的IOC容器,并且嵌入到.NET Core框架,以便于大家对IOC更深层次的理解。大家可以关注我后续更新,由于是空余时间更新,所以更新时间比较慢。
我也给大家贴一下《控制反转容器和依赖注入模式》文章地址:
- 原文章地址:http://martinfowler.com/articles/injection.html
- 中文翻译地址:https://files.cnblogs.com/files/stono/DependencyInjection.pdf
以简御繁介绍IOC的更多相关文章
- 以简御繁——介绍IOC
1.IOC的理论背景 大家开发理念,一直都是奔着架构稳定.低耦合性.而IOC初衷,就是为了解决模块依赖问题,理解<六大设计原则(SOLID)> 如图所示,在我们开发中,业务的实现,就是靠着 ...
- java简单例子介绍IOC和AOP
IOC和AOP的一些基本概念 介绍 IOC 一.什么是IOC IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内 ...
- Spring入门介绍-IOC(二)
浅谈IOC IOC(inversion of control)是Spring的核心,贯穿始终.所谓IOC 就是有Spring来控制对象的生命周期和对象间的关系. 传统开发模式:对象之间相互依赖 IOC ...
- Spring IoC介绍与Bean的使用
1. 介绍 IoC IoC-Inversion of Control,即"控制反转",它不是什么技术,而是一种设计思想.在 Java 开发中, IoC意味着将设计好的对象交给容 ...
- IOC和DI的概念,以及Spring框架的介绍
对于Java开发者来说,Spring肯定是一个避不开的技术.所以准备系统的学下Spring框架. 我给自己设计的学习路线是这样的:首先阅读下Spring的官方文档(注意Spring官网上有很多项目,S ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- 通过中看不中用的代码分析Ioc容器,依赖注入....
/** * 通过生产拥有超能力的超人实例 来理解IOC容器 */ //超能力模组接口 interface SuperModuleInterface{ public function activate( ...
- 控制反转IoC简介
控制反转IoC简介 在实际的应用开发中,我们需要尽量避免和降低对象间的依赖关系,即降低耦合度.通常的业务对象之间都是互相依赖的,业务对象与业务对象.业务对象与持久层.业务对象与各种资源之间都存在这样或 ...
- Unity(一)介绍与基本使用
一.IOC介绍 IOC(Inversion of Control),中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection) IOC的基本概念是:不创建对象,但是描述创 ...
随机推荐
- adult
adult是adolescere (grow up)的过去分词. egg - embryo [胚胎] - foetus [就要出生的胎儿] - toddler [刚会走路] - adolescent ...
- day33 前端之css
day33 前端之css css简介 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. # 语法结构 选择器 { 属性名1,属性值 属性名2,属性值 } # ...
- 启动spark-shell --master yarn的bug
报错如下 18/06/06 15:55:31 ERROR cluster.YarnClientSchedulerBackend: Yarn application has already exited ...
- 修改linux文件权限命令:chmod 转载至 Avril 的随笔
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...
- 集合类——Map集合、Properties属性文件操作
1.Map集合 Collection集合的特点是每次进行单个对象的保存,若要对一对对象来进行保存就只能用Map集合来保存.即Map集合中一次可以保存两个对象,且这两个对象的关系是key = value ...
- react中在hooks方法useEffect中加载异步数据
useEffect( ()=>{ (async function getPipeList(value:any) { let result= await GetPipeList(value); s ...
- Nginx支持php
目录 一.简介 二.配置 三.测试 四.参数 一.简介 Nginx本身只能解析html文件,但有些网页是php写的,就需要Nginx连接php,将网页解析成html再发给客户端. 配置中将.php 结 ...
- 车载以太网第二弹|测试之实锤 -DoIP测试开发实践
前言 车载以太网测试之实锤系列,之前我们已经从环境设备组成.被测对象组成再到测试过程和测试结果分析,分享了完整的PMA测试 .IOP测试 .TC8中的TCP/IP协议一致性测试 .也分享了1000BA ...
- SimpleCursorAdapter 原理和实例
SimpleCursorAdapter 1. 原理参见下面代码注释 Cursor cursor = dbHelper.fetchAllCountries(); //cursor中存储需要加载到list ...
- 一个使用 asyncio 开发的网络爬虫(译文)
原文地址:https://www.aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html 作者简介 A. Jesse Jiryu ...