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

 更新时间:2014年09月17日 16:53:19   投稿:whsnow  
控制反转,从字面意思来看, 就是控制权由被动变主动又变为被动,或被动变主动又变为被动。从这个角度来说,IOC就变得非常容易理解

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

相关文章

  • SQL通用存储过程分页,支持多表联合

    SQL通用存储过程分页,支持多表联合

    以前用.net写分页存储过程时老是一张表就要写一个procedure.很忙烦.后来有空就整合了一下,做了一个通用的sql分页存储,支持多表联合查询分页.写的不好的地方,希望大鸟们多多指导.使的查询速度更快.
    2011-11-11
  • VS2019离线安装方法图文教程

    VS2019离线安装方法图文教程

    这篇文章主要为大家详细介绍了VS2019离线安装方法图文教程,,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • .net core 删除字符串最后一个字符的七大类N种实现方式(总结篇)

    .net core 删除字符串最后一个字符的七大类N种实现方式(总结篇)

    本文详细介绍了七大类、N种不同的方法来删除字符串的最后一个字符,涵盖了从简单的字符串方法到使用StringBuilder、数组操作、Linq以及正则表达式等多种技术手段,本文给大家介绍.net core删除字符串最后一个字符,感兴趣的朋友一起看看吧
    2024-10-10
  • 国产化中的 .NET Core 操作达梦数据库DM8的两种方式(操作详解)

    国产化中的 .NET Core 操作达梦数据库DM8的两种方式(操作详解)

    这篇文章主要介绍了国产化之 .NET Core 操作达梦数据库DM8的两种方式,这里提供两种方式是传统的DbHelperSQL方式和Dapper 方式,每种方式给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • .Net8.0 WebApi发布到IIS详细步骤

    .Net8.0 WebApi发布到IIS详细步骤

    本文主要介绍了.Net8.0 WebApi发布到IIS详细步骤, 文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • ASP.NET打开新页面而不关闭原来的页面 实例代码

    ASP.NET打开新页面而不关闭原来的页面 实例代码

    这篇文章介绍了ASP.NET打开新页面而不关闭原来的页面 实例代码,有需要的朋友可以参考一下,希望对你有所帮助
    2013-07-07
  • ASP.NET Core+Docker+Jenkins实现持续集成的完整实例

    ASP.NET Core+Docker+Jenkins实现持续集成的完整实例

    这篇文章主要给大家介绍了关于ASP.NET Core+Docker+Jenkins实现持续集成的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • .Net弹性和瞬态故障处理库Polly实现弹性策略

    .Net弹性和瞬态故障处理库Polly实现弹性策略

    这篇文章介绍了.Net弹性和瞬态故障处理库Polly实现弹性策略的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • ASP.NET2.0 SQL Server数据库连接详解

    ASP.NET2.0 SQL Server数据库连接详解

    本文将详细介绍如何使用Connection对象连接数据库 。对于不同的.NET 数据提供者,ADO.NET采用不同的Connection对象连接数据库。这些Connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法。
    2009-07-07
  • asp.net 上传或下载当文件名包含有特殊字符"#"的处理

    asp.net 上传或下载当文件名包含有特殊字符"#"的处理

    在上传或下载文件时,当文件名包含有"#"特殊字符时,上传以后的文件会被改名字,造成下载也下载不了。
    2010-03-03

最新评论