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

相关文章

  • ASP.NET MVC使用jQuery Template实现批量更新

    ASP.NET MVC使用jQuery Template实现批量更新

    这篇文章介绍了ASP.NET MVC使用jQuery Template实现批量更新的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • .NET实现仓储Repository(AI)的操作方法

    .NET实现仓储Repository(AI)的操作方法

    仓储模式是一种在应用程序中使用的设计模式,它将数据访问逻辑与业务逻辑分离,通过仓储接口和仓储实现类,您可以定义和实现数据的增删改查操作,这篇文章主要介绍了.NET 实现仓储Repository(AI),需要的朋友可以参考下
    2023-09-09
  • asp.net简单生成XML文件的方法

    asp.net简单生成XML文件的方法

    这篇文章主要介绍了asp.net简单生成XML文件的方法,结合实例形式分析了2种生成XML文件的技巧,需要的朋友可以参考下
    2016-04-04
  • ASP.NET Core通用主机实现托管服务

    ASP.NET Core通用主机实现托管服务

    这篇文章介绍了ASP.NET Core通用主机实现托管服务的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • asp.net+ajax的Post请求实例

    asp.net+ajax的Post请求实例

    这篇文章主要介绍了asp.net+ajax的Post请求实现方法,实例分析了Ajax的发送post数据的原理与技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • ASP.NET微信公众号添加菜单

    ASP.NET微信公众号添加菜单

    这篇文章主要为大家详细介绍了ASP.NET微信公众号添加菜单的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • ASP.NET Core MVC 中实现中英文切换的示例代码

    ASP.NET Core MVC 中实现中英文切换的示例代码

    这篇文章主要介绍了ASP.NET Core MVC 中实现中英文切换的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • ASP.NET The system cannot find the file specified解决办法

    ASP.NET The system cannot find the file specified解决办法

    这篇文章主要介绍了ASP.NET The system cannot find the file specified解决办法的相关资料,需要的朋友可以参考下
    2016-11-11
  • 如何在.NET Core中为gRPC服务设计消息文件(Proto)

    如何在.NET Core中为gRPC服务设计消息文件(Proto)

    这篇文章主要介绍了如何在.NET Core中为gRPC服务设计消息文件(Proto),帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下
    2021-05-05
  • asp.net操作xml增删改示例分享

    asp.net操作xml增删改示例分享

    这篇文章主要介绍了asp.net操作xml增删改示例,需要的朋友可以参考下
    2014-02-02

最新评论