控制反转(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):
控制反转(IOC)模式的更多相关文章
- .NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
		
依赖倒置原则(DIP) 依赖倒置(Dependency Inversion Principle,缩写DIP)是面向对象六大基本原则之一.他是指一种特定的的解耦形式,使得高层次的模块不依赖低层次的模块的 ...
 - 控制反转IoC简介
		
控制反转IoC简介 在实际的应用开发中,我们需要尽量避免和降低对象间的依赖关系,即降低耦合度.通常的业务对象之间都是互相依赖的,业务对象与业务对象.业务对象与持久层.业务对象与各种资源之间都存在这样或 ...
 - 控制反转IOC的依赖注入方式
		
引言: 项目中遇到关于IOC的一些内容,因为和正常的逻辑代码比较起来,IOC有点反常.因此本文记录IOC的一些基础知识,并附有相应的简单实例,而在实际项目中再复杂的应用也只是在基本应用的基础上扩展而来 ...
 - 控制反转IOC与依赖注入DI【转】
		
转自:http://my.oschina.net/1pei/blog/492601 一直对控制反转.依赖注入不太明白,看到这篇文章感觉有点懂了,介绍的很详细. 1. IoC理论的背景我们都知道,在采用 ...
 - 依赖注入(DI)和控制反转(IOC)
		
依赖注入(DI)和控制反转(IOC) 0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只 ...
 - 个人对【依赖倒置(DIP)】、【控制反转(IOC)】、【依赖注入(DI)】浅显理解
		
一.依赖倒置(Dependency Inversion Principle) 依赖倒置是面向对象设计领域的一种软件设计原则.(其他的设计原则还有:单一职责原则.开放封闭原则.里式替换原则.接口分离原则 ...
 - 【转载】浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
		
原文地址 http://blog.csdn.net/briblue/article/details/75093382 写这篇文章的原因是这两天在编写关于 Dagger2 主题的博文时,花了大量的精力来 ...
 - 控制反转IOC与依赖注入DI  -  理论篇
		
学无止境,精益求精 十年河东十年河西,莫欺少年穷 昨天是五一小长假归来上班的第一天,身体疲劳,毫无工作热情.于是就看看新闻,喝喝茶,荒废了一天 也就在昨天,康美同事张晶童鞋让我学习下IOC的理论及实现 ...
 - 前端解读控制反转(IOC)
		
前言 随着前端承担的职责越来越重,前端应用向着复杂化.规模化的方向发展.大型项目模块化是一种趋势,不可避免模块之间要相互依赖,此外还有很多第三方包.这样的话如何去管理这些繁杂的文件,是一个不可避免的话 ...
 - 依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
		
原文: https://blog.csdn.net/briblue/article/details/75093382 写这篇文章的原因是这两天在编写关于 Dagger2 主题的博文时,花了大量的精力来 ...
 
随机推荐
- PHP的线性安全和非线性安全的区别
			
从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方 ...
 - T-SQL练习题
			
转自:http://www.cnblogs.com/jenrrychen/p/5348546.html 1 - 3 题: 数据表结构: OrderID ProductID OrderDate Sal ...
 - js-jquery-SweetAlert2【二】配置与方法
			
一.配置 Argument Default value Description title null 模态对话框的标题.它可以在参数对象的title参数中设置,也可以在swal()方法的第一个参数 ...
 - A Basic Example of Threads Synchronization in Python, python中的线程同步示例
			
http://zulko.github.io/blog/2013/09/19/a-basic-example-of-threads-synchronization-in-python/ We will ...
 - raspberry pi 树莓派作为比特比矿机
			
http://www.instructables.com/id/Bitcoin-Mining-using-Raspberry-Pi/ Step 5: Installing Required Libra ...
 - Redis 监控方案
			
一.概述 近些天,遇到Redis监控的应用场景,从网上搜罗了一些文章,做了整理. 二.工具列表 2.1 redis-faina 见参考文章1 2.2 redis-live 见参考文章1 2.3 red ...
 - Codeforces Round #265 (Div. 2) E
			
这题说的是给了数字的字符串 然后有n种的操作没次将一个数字替换成另一个字符串,求出最后形成的字符串的 数字是多大,我们可以逆向的将每个数推出来,计算出他的值和位数记住位数用10的k次方来记 1位就是1 ...
 - open-falcon设置报警邮件
			
下载编译好的二进制包并解压: https://files.cnblogs.com/files/dylan-wu/mail-provider.tar.gz [root@localhost work]# ...
 - 使用 Laravel 数据填充功能生成中文测试数据
			
今晚……不对,是昨晚,折腾一个的小项目,发现自动填充的中文数据显示起来总不太美观,于是开始琢磨如何填充中文数据进行测试. 然而一番搜索后惊奇的发现,官方.以及一些非官方的文档均未提及这一功能.期间看到 ...
 - PostgreSQL 9.3:在windows(包括win7)下的安装与正确配置
			
首先,以下是常用命令: ③ initdb 初始化 数据库. ④ pg_ctl start 启动数据库 ⑤ pg_ctl stop 停止数据库 ⑥ post_svc -install 建立windows ...