关于.NET中的控制反转(一)- 概念与定义
一、控制反转
1:类与类的依赖
依赖是面向对象中用来描述类与类之间一种关系的概念。两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务,这样的两个对象之间主要体现为依赖关系
2:控制反转(IoC,Inverse of Control)
说反转则要先说“正转”,传统中,在程序中使用new关键字配合构造函数去创建一个对象,这就是程序主动的创建其所依赖对象,这就是“正转”。
调用者不自己创建被调用者对象,而交由第三方(容器)进行创建被调用者对象,这个过程称为控制反转(inversion of control,IOC)。
为什么要控制反转?控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度,便于扩展和后期维护。
IoC的核心思想:在需要对象实例的时候,不要总考虑自己通过 new 来创建对象,放下依赖对象的创建过程,而是把创建对象的工作交给别人来负责,这个别人我们通常称为 容器 (Container) 或者 服务提供者 (ServiceProvider)。
3:依赖注入(DI,Dependedency Injection)
实现控制反转的主要方式是依赖查找(Dependency Lookup,DL)和依赖注入(DI,Dependedency Injection,DI)。依赖注入是一种更可取的方式。
依赖注入具体是指:调用类 不主动创建依赖对象,而是使用容器来帮忙创建及注入依赖对象,这个过程就称为依赖注入(Dependency Injection,DI)
具体的说:Class A(调用类)中用到 Class B 类型的对象(依赖对象),通常情况下,我们在 Class A 中使用new关键字配合构造函数创建一个 Class B 的对象
但是,采用依赖注入技术之后, Class A只需要定义一个Class B类型的属性,不需要直接new来获得这个对象,而是通过IOC容器 将Class B类型的对象在外部new出来并注入到Class A里的引用中,从而实现Class A和Class B解耦。
二、控制反转容器
1:IoC容器
在说到控制反转时提到“使用IOC容器在 调用类 外部创建 依赖对象 并注入到 调用类”,其中IOC容器是什么?
IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。从而,应用程序无需直接在代码中new相关的对象,应用程序由IOC容器进行组装。
简而言之,IOC容器主要就两个作用:1、绑定服务与实例之间的关系;2、对实例进行创建和销毁。
2:.NET最为流行的IoC容器框架
Unity:微软patterns&practicest团队开发的IOC依赖注入框架,支持AOP横切关注点。
MEF(Managed Extensibility Framework):是一个用来扩展.NET应用程序的框架,可开发插件系统。
Spring.NET:依赖注入、面向方面编程(AOP)、数据访问抽象,、以及ASP.NET集成。
PostSharp:实现静态AOP横切关注点,使用简单,功能强大,对目标拦截的方法无需任何改动。
Autofac:最流行的依赖注入和IOC框架,轻量且高性能,对项目代码几乎无任何侵入性。
关于.NET中的控制反转(一)- 概念与定义的更多相关文章
- 轻松了解Spring中的控制反转和依赖注入(二)
紧接上一篇文章<轻松了解Spring中的控制反转和依赖注入>讲解了SpringIOC和DI的基本概念,这篇文章我们模拟一下SpringIOC的工作机制,使我们更加深刻的理解其中的工作. 类 ...
- Spring框架中IoC(控制反转)的原理(转)
原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...
- 关于.NET中的控制反转(三)- 依赖注入之 Autofac
一.Autofac简介 Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成.Autofac的主要特性如下: 组件侵入性为零 ...
- Spring中的控制反转和依赖注入
Spring中的控制反转和依赖注入 原文链接:https://www.cnblogs.com/xxzhuang/p/5948902.html 我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达 ...
- 依赖注入 DI 控制反转 IOC 概念 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 关于.NET中的控制反转及AutoFac的简单说明
目录 1.控制反转 1.1 什么是依赖? 1.2 什么是控制反转? 1.3 什么是依赖注入? 1.4 简单总结 2.控制反转容器 2.1 IOC容器说明 2.2 使用AutoFac的简介示例 3 使用 ...
- 轻松了解Spring中的控制反转和依赖注入(一)
我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达170平方米,重达30吨,到现如今的个人笔记本,事物更加轻量功能却更加丰富,这是事物发展过程中的一个趋势,在技术领域中同样也是如此,企业级Ja ...
- spring中的控制反转IoC和依赖注入DI
原文:http://blog.163.com/xianghuxian@126/blog/static/50639037200721345218382/ IoC(Inversion of Control ...
- spring中的控制反转
为什么使用spring框架,控制反转是它的重要优势之一. 传统的程序设计中,某个对象需要被调用时(比如mvc模式中controller调用service),需要调用者自己创建被调用对象. 而在spri ...
随机推荐
- FM解析(因子分解机,2010)
推荐参考:(知乎) https://zhuanlan.zhihu.com/p/37963267 要点理解: 1.fm应用场景,为什么提出了fm(和lr的不同点) ctr预测,特征组合,fm的隐向量分解 ...
- vue通过事件向父级组件发送消息(官网点击放大例子)
注意:Vue.component一定要写在new Vue之前 在页面中使用组件 整体代码示例
- P6772 [NOI2020]美食家
题目大意 给你一个 \(n\) 个点,\(m\) 条边的有向图,每条边有一个权值 \(w_i\) ,每个节点有一个权值 \(a_i\) . 你从节点 \(1\) 出发,每经过一个节点就可以获得该点的权 ...
- 深入理解Java虚拟机(六)——JVM调优分析与实战
大内存硬件上的程序部署策略 单个虚拟机管理大内存 出现问题 如果JVM中的堆内存太小,就会频繁地出发GC,而每次GC会将用户线程暂停,所以,频繁地GC会导致长时间的停顿.如果扩大计算的内存的大小,就能 ...
- SpringBoot 拦截器和自定义注解判断请求是否合法
应用场景举例: 当不同身份的用户请求一个接口时,用来校验用户某些身份,这样可以对单个字段数据进行精确权限控制,具体看代码注释 自定义注解 /** * 对比请求的用户身份是否符合 * @author l ...
- css3动画帧
动画帧实现: css3使用steps来实现逐帧动画,动画过程中可能出现抖动,实乃精度偏差问题. 通常在动画里用到百分比单位时会出现抖动或位移现象,解决方法就是转换成具体的rem或px长度单位. 动画一 ...
- centos7 安装netstat命令工具
[root@node01 yum.repos.d]# yum install -y net-tools Loaded plugins: fastestmirror Loading mirror spe ...
- 谁再问Servlet的问题,我就亲自上门来教学了
1. 概述 在这篇简短的文章中,我们将从概念上理解什么是servlet 和 servlet 容器以及它们是如何工作的. 同时,还能在请求.响应.会话对象.共享变量和多线程的上下文中看到它们的身影. 2 ...
- Vscode下载与配置(C语言)
目录 VScode 一.VScode下载 二.设置中文 三.Vscode界面介绍 1.活动栏 2.侧边栏 3.编辑栏 4.面板栏 四.VScode配置 1.C&C++配置 第一步 下载安装Mi ...
- pandas的学习1-基本介绍
''' Numpy 和 Pandas 有什么不同 如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而 Pandas 就是字典形式.Pandas是基于N ...