asp.net中控制反转怎么理解?

   对IOC的解释为:“Inversion of control is a common characteristic of frameworks, so saying that these lightweight containers are special because they use inversion of control is like saying my car is special because it has wheels.”

  我想对这一概念执行 一个个人的阐述,以方便我的理解。控制反转,从字面意思来看, 就是控制权由被动变主动又变为被动,或被动变主动又变为被动。从这个角度来说,IOC就变得非常容易理解了。

  举个例子:你的主管要求你做一件事情,这个时候就存在这么多个 流程 ,主管命令你做事情(这个时候主动权在主管,你是被动的)

  你接到命令做事情(这个时候主题是你,你是主动的,控制权在你手里) 你完成事情(这个时候主题依然是你,控制权在你手里)

  报告主管做完事情(主动权又叫交到主管手里了)

  上面的整个流程 就完成了一次IOC,从上面可以看出,IOC的基本思想是控制权的转换流程 。

  举个代码的例子:

  假如有Class A,Class B,在A内部会原始化一个B,调用B的一个要领

  DoMethod public Class B

  {

  public void DoMethod()

  {

  /// do somthing;

  }

  }

  public Class A

  {

  public void Excute()

  {

  B b = new B();

  b.DoMethod();

  }

  }

  假如在Main函数中如下执行:   A a = new A();   a.Excute();

  从这两行代码来看,事实上也存在一个IOC的流程 ,a——>b——>a,理解的关键点就在在A的内部调用Excute的时候, 要领 b.DoMethod的执行。  理解了IOC,我们再看一下DI, 从上面A调用B我们可以看出, 在原始化一个A的实例时,也必须实例化一个B,也就是说如果没有B或者B出了疑问 , A就不能 实例化,这就产生了一种依赖,就是A依赖B, 这种依赖从设计的角度来说就是耦合,显然它是不能 满足高内聚低耦合的要求的。这个时候就须要 解耦, 当然解耦有很多种要领 , 而DI就是其中一种。不管任何一种解耦要领 ,都不是说使A和B完全没有联系 , 而是把这种联系 的实现变得隐晦,不那么直接,但是又很容易实现, 而且易于扩展,不像上面的代码那样,直接new一个B出来。那为什么我们总是把IOC和DI联系到一起呢? 是因为DI的基本思想就是IOC,而体现IOC 思想的要领 还有另外一个,那就是Service Locator,这个要领 好像涉及到的很少。其实这些都是从java里面衍生出来的,虽然本人已经好几年没用java,里面Spring这些都会用到IOC、DI好像他们是紧密连接在一块的。

时间: 2024-08-22 14:06:16

asp.net中控制反转怎么理解?的相关文章

asp.net中控制反转的理解(文字+代码)_实用技巧

对IOC的解释为:"Inversion of control is a common characteristic of frameworks, so saying that these lightweight containers are special because they use inversion of control is like saying my car is special because it has wheels." 我想对这一概念执行 一个个人的阐述,以方便

Android应用开发中控制反转IoC设计模式使用教程_Android

1.概述首先我们来吹吹牛,什么叫IoC,控制反转(Inversion of Control,英文缩写为IoC),什么意思呢? 就是你一个类里面需要用到很多个成员变量,传统的写法,你要用这些成员变量,那么你就new 出来用呗~~ IoC的原则是:NO,我们不要new,这样耦合度太高:你配置个xml文件,里面标明哪个类,里面用了哪些成员变量,等待加载这个类的时候,我帮你注入(new)进去: 这样做有什么好处呢?  回答这个问题,刚好可以回答另一个问题,很多人问,项目分层开发是吧,分为控制层.业务层.

Android应用开发中控制反转IoC设计模式使用教程

1.概述 首先我们来吹吹牛,什么叫IoC,控制反转(Inversion of Control,英文缩写为IoC),什么意思呢? 就是你一个类里面需要用到很多个成员变量,传统的写法,你要用这些成员变量,那么你就new 出来用呗~~ IoC的原则是:NO,我们不要new,这样耦合度太高:你配置个xml文件,里面标明哪个类,里面用了哪些成员变量,等待加载这个类的时候,我帮你注入(new)进去: 这样做有什么好处呢?  回答这个问题,刚好可以回答另一个问题,很多人问,项目分层开发是吧,分为控制层.业务层

ASP.NET中控制一些服务器的配置文件,Apache、Tomcat等conf文件。

问题描述 如何根据一些特定的值查询到位置,然后修改一些参数或者添加新的信息?有没有什么好的例子? 解决方案 解决方案二:对xml文件进行操作解决方案三:Apache的conf文件应该是ini文件.可以用Windows的API读取和写入.解决方案四:引用2楼lifeilin6671的回复: Apache的conf文件应该是ini文件.可以用Windows的API读取和写入. 能详细点吗?解决方案五:引用1楼andywangguanxi的回复: 对xml文件进行操作 不是xml文件,是httpd.c

理解php依赖注入和控制反转_php技巧

要想理解php依赖注入和控制反转两个概念,就必须搞清楚如下的问题:  DI--Dependency Injection   依赖注入 IoC--Inversion of Control  控制反转 1.参与者都有谁? 答:一般有三方参与者,一个是某个对象:一个是IoC/DI的容器:另一个是某个对象的外部资源.又要名词解释一下,某个对象指的就是任意的.普通的Java对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序:对象的外部资源指的就是对象需要的,但是是从对象外部获取

ASP.NET Core中的依赖注入(1):控制反转(IoC)

ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化",我们将这些标准化的组件称为服务,ASP.NET在内部专门维护了一个DI容器来提供所需的服务.要了解这个DI容器以及现实其中的服务提供机制,我们先得知道什么是DI(Dependence Injection),而一旦我们提到DI,又不得不说IoC(Inverse of Control). 目录 一.流程控

Laravel 深入理解控制反转(IoC)和依赖注入(DI)

容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存放的不是文本.数值,而是对象.对象的描述(类.接口)或者是提供对象的回调,通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是 "解耦" ."依赖注入(DI)".本文就从这里开始. IoC 容器 -- Laravel 的核心 Laravel 的核心就是一个 IoC 容器,根据文档,称其为"服务容器&qu

实例讲解Java的Spring框架中的控制反转和依赖注入_java

近来总是接触到 IoC(Inversion of Control,控制反转).DI(Dependency Injection,依赖注入)等编程原则或者模式,而这些是著名 Java 框架 Spring.Struts 等的核心所在.针对此查了 Wikipedia 中各个条目,并从图书馆借来相关书籍,阅读后有些理解,现结合书中的讲解以及自己的加工整理如下:   eg1问题描述: 开发一个能够按照不同要求生成Excel或 PDF 格式的报表的系统,例如日报表.月报表等等.   解决方案: 根据"面向接口

在Eclipse RCP中实现反转控制(IoC)

控制 Eclipse富客户平台(RCP)是一个功能强大的软件平台,它基于插件间的互连与协作,允许开发人员构建通用的应用程序.RCP使开发人员可以集中精力进行应用程序业务代码的开发,而不需要花费时间重新发明轮子编写应用程序管理的逻辑. 反转控制(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)是两种编程模式,可用于减少程序间的耦合.它们遵循一个简单的原则:你不要创建你的对象:你描述它们应当如何被创建.你不要实例化你的部件所需要对象或