今天趁着空闲总结一下自己IOC的一些理解,希望可以帮助到有需要的人,请大牛们多多指教。

(一)IOC

IOC就是控制反转,给程序解耦等等,有很多博客都对它做了一些很好的讲解。在这里我也不说太多文字,直接上代码吧。

定义了一个接口(服务)

  public interface ITestProvider
{
string GetUser(string name); string GetId(string name); }

实现了这个接口

 public class TestProvider:ITestProvider
{ private readonly string _userName;
public TestProvider(string userName) {
this._userName = userName;
} public string GetUser(string name)
{
return this._userName;
} public string GetId(string name)
{
return this._userName + "Id";
}
}

定义了一个控制器使用上面的接口(TestController是一个组件,里面有对

   public class TestController
{
private readonly string _userName;
private readonly ITestProvider _testProvider; public TestController(ITestProvider testProvider, string userName){
this._userName = userName;
this._testProvider = testProvider;
} public string GetUser(string name){
return _testProvider.GetUser(name);
}
}

现在要使用TestController

   ITestProvider testProvider =new TestProvider("zz"); //里氏转换原则
TestController testController=new TestController(testProvider,"ce");
Console.WriteLine(testController.GetUser("ss"));

//在写代码的时候,我们按照上面这种写法,我觉得问题也不是很大(再不是很大型的项目上)

//从上面这个例子中,我们可以看到这个最简单的道理。
//TestController,作为高层领导,要依赖于底层的ITestProvider。如果底层的ITestProvider一改变。那么高层领导也要跟着改。这就和我们现实生活中不符合了。下层员工牵着领导的鼻子走,显然领导就太没地位了。
//那现在领导肯定是不干的了,那么怎么让领导舒服一点呢。这个时候领导就去找个第三方的人(可能是秘书)来负责管理这些底层员工,自己和第三方有关系即可。其他事情都交给第三方。
//在我们编程也是一样的,高层TestController,为了好好管理底层,不让自己受到底层的牵连,所以就引入了IOC容器。

(二)IOC容器

控制反转容器使用上述原则(简而言之)管理类。也就是说,他们的创建,销毁,生命周期,配置和依赖关系。这样,类不需要获取和配置它们所依赖的类。这极大地减少了系统中的耦合,并因此简化了重用和可测试性。

(三) IOC的优缺点

优点上面已经说完了。下面讲讲缺点;

(1) 你要引入一个第三方,把系统变得复杂了一点。

(2) 引入一个第三方了,自己赚的也少了,所以说如果你系统不是很大,你引入第三方来管理的话,我觉得不是很合理的。如果你项目庞大,引入第三方还是非常有必要的。

(3) 到编程领域的话呢,就是一般都是通过XML文件来管理依赖的,所以你要把这个XML维护好。

IOC的总结的更多相关文章

  1. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  2. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  3. 深入理解DIP、IoC、DI以及IoC容器

    摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...

  4. 自己实现简单Spring Ioc

    IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC. 原理简单说明: 其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外 ...

  5. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

    1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...

  6. DIP原则、IoC以及DI

    一.DIP原则 高层模块不应该依赖于底层模块,二者都应该依赖于抽象. 抽象不应该依赖于细节,细节应该依赖于抽象. 该原则理解起来稍微有点抽象,我们可以将该原则通俗的理解为:"依赖于抽象&qu ...

  7. 【初探Spring】------Spring IOC(三):初始化过程---Resource定位

    我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...

  8. 【初探Spring】------Spring IOC(二):初始化过程---简介

    首先我们先来看看如下一段代码 ClassPathResource resource = new ClassPathResource("bean.xml"); DefaultList ...

  9. 【初探Spring】------Spring IOC(一)

    IOC:Inversion of Control(控制反转).IOC它所体现的并不是一种技术,而是一种思想,一种将设计好的对象交给容器来管理的思想.IOC的核心思想就体现在控制.反转这两个词上面,要理 ...

  10. .NET里简易实现IoC

    .NET里简易实现IoC 前言 在前面的篇幅中对依赖倒置原则和IoC框架的使用只是做了个简单的介绍,并没有很详细的去演示,可能有的朋友还是区分不了依赖倒置.依赖注入.控制反转这几个名词,或许知道的也只 ...

随机推荐

  1. PHP实现的进度条效果详解

      <?php //防止执行超时 set_time_limit(0); //清空并关闭输出缓存 ob_end_clean(); //需要循环的数据 for($i = 0; $i < 188 ...

  2. Redis在centos6.4上的最详细图文安装教程

    准备工作:一个redis3.0.0的安装包,没有可以点击下面的链接下载 https://pan.baidu.com/s/1kU5Ez2J 工具 安装环境   centos6.4 好了开始进入正题 输入 ...

  3. java内存模型个人理解总结

    现阶段线程之间的通讯主要有两种:内存共享和消息传递,而且在java中是采用的内存共享.简单说下内存共享: 假设现在有a线程和b线程,在a和b线程之间的通讯是依靠a线程将相关数据刷新到共享内存,然后b线 ...

  4. 互联网协议(Internet Protocol Suite)

    互联网实现分层:有的7层有的4层:阮一峰认为分五层(个人喜欢): 最底下的一层叫做"实体层"(Physical Layer),最上面的一层叫做"应用层"(App ...

  5. POJ 2084 Catalan数+高精度

    POJ 2084 /**************************************** * author : Grant Yuan * time : 2014/10/19 15:42 * ...

  6. jsp内置对象 的使用范围和类型【说明】

    jsp内置对象 jsp内置对象有以下9种,我们会在后面的章节中分别介绍他们.这9种对象例如以下: 名称 类型 使用范围 request javax.servlet.http.HttpServletRe ...

  7. Android内核sysfs中switch类使用实例

    Android内核sysfs中switch类使用实例 最终在这个周末,能够干点自己想要干的事了. 由我这个二流的内核驱动开发人员来解析一下sysfs中的switch类.先猜測一下来历,在普通的嵌入式L ...

  8. Ant 给project打包

    写了一段主要的war打包.编译文件复制的 ant 配置文件 xml <?xml version="1.0" encoding="utf-8"? > ...

  9. NBUT 1217 Dinner

    [1217] Dinner 时间限制: 1000 ms 内存限制: 32768 K 问题描写叙述 Little A is one member of ACM team. He had just won ...

  10. 初装Ubuntu一般配置

    1. 开启ssh远程 2.修改root密码 sudo passwd 输入两次密码. 3.授权普通用户root权限 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: ...