.NET里简易实现IoC - 联系方式 - 长春市隆兴伟业物流有限公司
现在的位置: 主页 > 联系方式 > 文章正文
.NET里简易实现IoC
作者:长春市隆兴伟业物流有限公司 来源:www.lxwywl.com 发布时间:2017-09-09 10:19:02
.NET里简易实现IoC 前言

在前面的篇幅中对依赖倒置原则和IoC框架的使用只是做了个简单的介绍,并没有很详细的去演示,可能有的朋友还是区分不了依赖倒置、依赖注入、控制反转这几个名词,或许知道的也只是知道依赖倒置是原则,依赖注入、控制反转都是实现的方式,我将在下面对这些个名词做详细的介绍,在篇幅的最后还会自己实现了IoC容器的功能。

依赖倒置原则

我们先来看一段代码,代码1-1

复制代码

public class Top

{

public void Execution()

{

Underly underly = new Underly();

underly.WriterLine();

}

}

public class Underly

{

public void WriterLine()

{

Console.WriteLine("这是底层类型的输出");

}

}

复制代码

从代码1-1中看到Top类型的Execution()方法中包含了对Underly的依赖,直接使用的New来实例化Underly类型,致使两个类型之间的耦合是属于强耦合类型,这样做会导致在需求发生变化的时候对于底层类型也就是Underly的修改会牵动到Top中的现实,而我们是不希望这种事情发生。

这个时候我们再看依赖原则的定义(度娘的):

A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

B.抽象不应该依赖于具体,具体应该依赖于抽象。

A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象

对于A,照着字面意思来说的话很简单了,已经没法办再用文字来描述了,看代码吧,

代码1-2

复制代码

public class Top

{

public void Execution()

{

IUnderly underly = new Underly();

underly.WriterLine();

}

}

public interface IUnderly

{

void WriterLine();

}

public class Underly:IUnderly

{

public void WriterLine()

{

Console.WriteLine("这是底层类型的输出");

}

}

复制代码

在代码1-2中我们对Underly进行了抽象,并且让其依赖于抽象(也就是实现接口),而在Top类型中也依赖于抽象了。

所示的就是代码1-2所要表示的类型结构了,也就是依赖倒置原则中A的实现,从图1中我们可以看到依赖倒置原则里还装着开放封闭原则,这里所要说明的意思就是依赖倒置原则是开放封闭原则的基础。

从图1中的结构来看,如果是站在开放封闭原则的角度来看也是没有问题的,对扩展开放对修改关闭,在需求变动的时候只要重新实现个依赖于抽象的下层,利用多态则可实现对扩展开放。

如果是站在依赖倒置原则的角度去看,那就是符合了依赖倒置原则定义的A条。

(Ps:这里有的朋友可能会说上面的示例中Top也依赖于具体了,我只想说请注意你的人身安全,我这个人脾气不太好。

开个玩笑,对于Top也依赖于具体的事确实是有的,后面会有说明)

B.抽象不应该依赖于具体,具体应该依赖于抽象

对于依赖倒置原则定义的B来说,我分两个部分来给大家解释一下。

第一个部分就是抽象不应该依赖于具体, 我们还是通过代码来说明吧。

代码1-3

复制代码

public interface IUnderly

{

void WriterLine();

IWriter CreateWriterInstance();

}

public class Underly:IUnderly

{

public void WriterLine()

{

CreateWriterInstance().WriterLine();

}

public IWriter CreateWriterInstance()

{

return new Writer();

}

}

public interface IWriter

{

void WriterLine();

}

public class Writer : IWriter

{

public void WriterLine()

{

Console.WriteLine("这只是一个输出");

}

}

复制代码

首先我们新定义了一种输出方式Writer和它的抽象IWriter接口类型,我们想把它应用到Underly类型的输出中,然后我们修改了Underly的抽象类型也就是在IUnderly接口类型中新添加了一个CreateWriterInstance()方法,并且这个方法的返回类型是Writer的抽象,专题,这样就对应了依赖倒置原则定义中B条的前半句话:抽象不应该依赖于具体。

错误的示范,代码1-4

public interface IUnderly

{

void WriterLine();

Writer CreateWriterInstance();

}

这里这样的坏处很多后果也很严重,就不去细说了慢慢体会一下应该会感觉得到。

从依赖倒置原则定义中B条的前半句话中来看,我们可以在硕大的.NET Framework中看一下一些抽象的定义中是否有依赖于具体的,应该是没有至少我是没发现。

对于B条定义的后半句话,也就是第二个部分:具体应该依赖于抽象,这部分的内容就是约束我们在实际运用设计原则的时候会出现的问题,就好比上面的Top类型依然是依赖于具体了。

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站建设公司 https://www.jingchucn.com/zt/wuhan_wangzhanjianshe/


  • 上一篇:自定义注解定义和使用
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 长春市隆兴伟业物流有限公司 ALL RIGHTS RESERVED.
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100