asp.net中控制反转的理解(文字+代码)

 更新时间:2021年9月22日 10:11  点击:1342

对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好像他们是紧密连接在一块的。

[!--infotagslink--]

相关文章

  • C#使用自定义算法对数组进行反转操作的方法

    这篇文章主要介绍了C#使用自定义算法对数组进行反转操作的方法,涉及C#针对数组操作的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Python 实现反转整数的案例(很容易懂的那种)

    这篇文章主要介绍了Python 实现反转整数的案例(很容易懂的那种),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-10
  • ASP.NET Core依赖注入系列教程之控制反转(IoC)

    这篇文章主要给大家介绍了关于ASP.NET Core依赖注入系列教程之控制反转(IoC)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • 基于Python实现2种反转链表方法代码实例

    这篇文章主要介绍了基于Python实现2种反转链表方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-06
  • C++ 数字的反转实现实例

    这篇文章主要介绍了C++ 数字的反转实现实例的相关资料,需要的朋友可以参考下...2020-04-25
  • 如何使用递归和非递归方式反转单向链表

    以下是对使用递归和非递归方式反转单向链表的示例进行了详细的分析介绍,需要的朋友可以过来参考下...2020-04-25
  • 详解三种C#实现数组反转方式

    本篇文章主要介绍了详解三种C#实现数组反转方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • Java 中的控制反转(IOC)详解

    这篇文章主要介绍了理解Java 中的IOC控制反转,具有一定参考价值,需要的朋友可以了解下,希望能够给你带来帮助...2021-10-12
  • python反转一个三位整数的多种实现方案

    这篇文章主要介绍了python反转一个三位整数的多种实现方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-10
  • php array_reverse 以相反的顺序返回数组实例代码

    本篇文章主要介绍了php array_reverse 以相反的顺序返回数组实例代码,具有一定的参考价值,有兴趣的可以了解一下。 ...2017-04-26
  • PS反转LOGO图标的颜色的教程

    PS怎样才能做出两个颜色相反的图片?小编给大家带来了一篇教程,很轻松就能做出反转颜色的两张图片。 LOGO的颜色一般都比较简单,所以要将LOGO的颜色反转的步骤并不复...2016-12-15
  • Java Spring 控制反转(IOC)容器详解

    这篇文章主要为大家详细介绍了Spring控制反转IoC入门使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-04
  • Java 利用栈来反转链表和排序的操作

    这篇文章主要介绍了Java 利用栈来反转链表和排序的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • Python 反转输出正整数的操作

    这篇文章主要介绍了Python 反转输出正整数的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-10
  • 基于c#图像灰度化、灰度反转、二值化的实现方法详解

    本篇文章是对c#图像灰度化、灰度反转、二值化的实现方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • php中Ioc(控制反转)和Di(依赖注入)

    最近在使用ThinkPHP5框架,看了下他的源码,发现有很多地方也用到了依赖注入(控制反转),觉得有必要和大家简单聊一聊什么是依赖注入以及怎么使用它。...2017-05-21
  • C语言数据结构 link 链表反转的实现

    这篇文章主要介绍了C语言数据结构 link 链表反转的实现的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下...2020-04-25
  • 单链表实现反转的3种方法示例代码

    单链表的反转是常见的面试题目,下面这篇文章主要给大家介绍了关于单链表实现反转的3种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-04-25
  • 如何用python反转图片,视频

    这篇文章主要介绍了如何用python反转图片,视频,帮助大家更好的利用python处理图像,感兴趣的朋友可以了解下...2021-04-24
  • Java反转数组输出实例代码

    这篇文章主要给大家介绍了关于Java反转数组输出以及利用Java实现字符串逆序输出的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-08