今天趁着空闲总结一下自己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. 【福利】十一起,小冰科技所有UWP产品免费半个月

    从十月一日起(UTC协调世界时),至十月十五,小冰科技所有UWP产品免费半个月!!!!!! 注意是UTC哦,中国区,比UTC早8个小时,要等到十月一号早晨八点开始... 现在小冰科技旗下一共发布了 5 ...

  2. Yii2如何添加sql日志记录的配置信息

    在使用Yii2框架的时候,常常会出现没有sql日志记录的问题.在代码里一句一句的打印sql语句也不现实.所以就要用文件记录起来. 在 config/web.php 里面的 log配置中增加如下配置 [ ...

  3. postgres 9.5 FDW变化

    9.5主要是2个方法有变动: create_foreignscan_path extern ForeignPath *create_foreignscan_path(PlannerInfo *root ...

  4. YiShop_最全微信营销涨粉技巧

    在我们开始推广企业订阅号之前,我们必须思考微信营销策略,客户通过微信可以获得什么?企业通过微信可以得到什么?微分销专家建议企业微信定位为互动.服务工具,因为获取一个粉丝很难,可是失去一个粉丝,却是一件 ...

  5. 利用模板template动态渲染jsp页面

    一.场景 在js中写html简直是噩梦,刚进新公司,在codereview的时候得知可以通过将html模板写在jsp页面,然后由js调取模板,利用replace()方法替换传值的方式避免在js中拼接h ...

  6. 迭代加深搜索POJ 3134 Power Calculus

    题意:输入正整数n(1<=n<=1000),问最少需要几次乘除法可以从x得到x的n次方,计算过程中x的指数要求是正的. 题解:这道题,他的结果是由1经过n次加减得到的,所以最先想到的就是暴 ...

  7. 是否是有效的dom节点--轮子代码

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  8. HDU 4162 Shape Number(字符串,最小表示法)

    HDU 4162 题意: 给一个数字串(length <= 300,000),数字由0~7构成,求出一阶差分码,然后输出与该差分码循环同构的最小字典序差分码. 思路: 第一步是将差分码求出:s[ ...

  9. UML总结复习指南

    用例图 1. 參与者(Actor) 表示与您的应用程序或系统进行交互的用户.组织或外部系统.用一个小人表示.   2. 用例(Use Case)   用例就是外部可见的系统功能,对系统提供的服务进行描 ...

  10. Java序列化框架性能比較

    博客: http://colobu.com jvm-serializers提供了一个非常好的比較各种Java序列化的的測试套件. 它罗列了各种序列化框架. 能够自己主动生成測试报告. 我在AWS c3 ...