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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp.net
反转
,以便于您获取更多的相关知识。

时间: 2024-10-02 03:50:12

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

在ASP.Net中实现flv视频转换的代码_实用技巧

实际上是利用.Net中的Process对象来实现的.    string str=@"d:\test.avi  d:\test_allen.flv";    RunFFMpeg(str);    //运行FFMpeg的视频解码,    public void RunFFMpeg(string strCmd)    {        //创建并启动一个新进程        Process p = new Process();        //设置进程启动信息属性StartInfo,这是

在Asp.net中使用JQuery插件之jTip代码_实用技巧

默认支持两个参数: width宽度,default value :250px link 要link的URL对应的Source code是: 复制代码 代码如下: var params = parseQuery( queryString ); if(params['width'] === undefined){params['width'] = 250}; if(params['link'] !== undefined){ $('#' + linkId).bind('click',function

在asp.NET 中使用SMTP发送邮件的实现代码_实用技巧

核心代码: 复制代码 代码如下: public class Mail { #region 邮件参数 static public string accountName = System.Configuration.ConfigurationManager.AppSettings["SmtpAccountName"]; static public string password = System.Configuration.ConfigurationManager.AppSettings[

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." 我想对这一概念执行 一个个人的阐述,以

asp.net5中的用户认证与授权(1)_实用技巧

就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. asp.net5中,关于用户的认证和授权提供了非常丰富的功能,如果结合ef7的话,可以自动生成相关的数据库表,调用也很方便. 但是,要理解这么一大堆关于认证授权的类,或者想按照自己项目的特定要求对认证授权进行定制,确实很头疼.为了解决这个问题,需要从根本上理解认证和授权的机制,不过这不是个简单的事情,一些概念也比较抽象,

ASP.NET中URL Rewrite的具体实现方法_实用技巧

之前觉得这个话题已经被谈滥了.URL Rewrite早已经被广大开发人员所接受,网上关于URL Rewrite的组件和文章也层出不穷,但是总是让我感觉意犹未尽,于是最终还是忍不住提笔写了这系列文章.这些文章不会谈论URL Rewrite的价值与意义,而只会谈论纯技术的内容.文章中也不会有详尽地实现分析,而是结合了我的经验,从应用角度来讲解这个话题.您已经知道的,您还不知道的,别处已经讲过的,或者还没有讲过的,希望这系列文章的"旧事重提"不会让您觉得沉闷,并且能让您了解ASP.NET中U

asp.net中GridView编辑,更新,合计用法示例_实用技巧

本文实例讲述了asp.net中GridView编辑,更新,合计用法.分享给大家供大家参考,具体如下: 前台代码: <asp:GridView ID="tabgv" runat="server" DataKeyNames="ysId" ShowFooter="True" OnRowDataBound="GridView1_RowDataBound" OnRowCreated="GridView

ASP.NET中实现jQuery Validation-Engine的Ajax验证_实用技巧

见下图: 验证的例子:http://www.position-relative.net/creation/formValidator/ 官方地址: http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/ 这个插件支持大部分的浏览器,但由于有使用到了css3的阴影和圆角样式,所以在IE浏览器下无法看到圆角和阴影效果(IE 9 支持圆角效果). 本文主要内容是

asp.net中Table生成Excel表格的方法_实用技巧

本文实例讲述了asp.net中Table生成Excel表格的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/19