今天趁着空闲总结一下自己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. PAT 1008. Elevator (20)

    1008. Elevator (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The highest ...

  2. c# 初识WPF

    WPF,全名是Windows Presentation Foundation,是微软在.net3.0 WinFX中提出的.WPF是对Direct3D的托管封装,它的图形表现依赖于显卡.当然,作为一种更 ...

  3. NNSZ OIers' Blog Archive

    HWL:ssttkkl ,已经搬家到这个地址 NINGLONG:NINGLONG 愤鸟先飞: FNXF Syhien:13355936 ,已经搬家到这个地址 IDE:ThetaS TFW:TFX‘s ...

  4. slurm-16.05.3任务调度系统部署与测试(1)

      1.概述2.同步节点时间3.下载并解压文件4.编译安装munge-0.5.125.配置munge6.编译安装slurm-16.05.37.配置slurm8.配置MySQL数据库环境9.启动slur ...

  5. Docker 运行Tensorboard 和 jupyter的正确方法

    Docker 运行Tensorboard 和 jupyter的正确方法 网上找了很多方法都是jupyter 运行正常但不知道如何打开Tensorboard.折腾了很久,实验很多中方法最终找到了一个正确 ...

  6. 一起talk C栗子吧(第一百二十六回:C语言实例--statickeyword)

    各位看官们,大家好,上一回中咱们说的内置宏的样例.这一回咱们说的样例是:static关键字. 闲话休提.言归正转. 让我们一起talk C栗子吧! 看官们,C语言提供了static关键字.它常常出如今 ...

  7. 利用java mail发送邮件(转)

    JavaMail是SUN提供给开发者在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持经常使用的邮件协议,如SMTP.POP3.IMAP.开发者使用JavaMail编写邮件程序时,无需考 ...

  8. C++windows内核编程笔记day09_day10,对话框和窗体基本控件等的使用

    //设置字体颜色 SetTextColor(hdc,RGB(255,0,0)); //窗体背景 //wce.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); //wce. ...

  9. linux 磁盘管理三部曲——(3)mount挂载,/etc/fstab配置文件

    当我们分完区,并做好文件系统格式化,就到了最后的挂载mount了,挂载完毕就可以使用磁盘设备了. 一.什么是挂载,卸载 任何块设备都不能直接访问,需挂载在目录上访问 挂载: 将额外文件系统与根文件系统 ...

  10. 我在Windows下的第一个Shellcode

    纪念我的第一个Shellcode(XP SP3, VC6): 1.获取MessageBoxA(ASCII)的静态地址 2.编写汇编代码调试,获取对应的机器码(注意字符串由栈顶向栈底生长,push由栈底 ...