日期:2014-05-16  浏览次数:20381 次

看了很多关于IOC和控制反转,依赖注入的文章和博客,但是还是不理解IOC,依赖注入核心是什么,好处主要体现在哪?
求哪位大侠,用通俗易懂的语言解释一下
------解决方案--------------------
我不知道你看的是哪些文章。最近这些年的相关网络上的博客,几乎全都是一些意淫的文章,所以会让你感觉混沌。

AOP在2005年比较成熟了,而且有相当多的工具。以后并没有什么发展。因此如果你看到的都是最近这些年的中文博客,而且是结合.net的,我估计你看到了一堆挖坟的人胡扯了一些理论。

简单说,AOP可以看作是跟微软在windows编程领域从(最迟)1993年就一直主张的“事件驱动”控制模式一致的东西,只不过AOP想把它弄到“极致”(因此AOP失去了“恰当”的分寸、反而走向了“反动”)。

AOP是要直接插入人家已经编译好的dll或者exe中,直接给人家每一个对象的属性、方法,都生生插入事件。它们说只要生硬地插入事件,就能“横切”任意系统软件,就能随意监听任何对象属性的改动、随意挂接任何活动的处理,随意改变任何程序的流程。

我曾经做过这方面的事情,费了劲做到了在运行时通过mono的库注入了这些东西之后,我彻底后悔了。因为我们编写的c#程序再也无法调试了,因为所有的定位信息全都很乱了。可是由于借助于AOP的插入,你的代码实际上非常难以调试,你这时候特别需要一个准确调试工具。可是AOP却彻底让你的调试器根本就垮掉了。

后来我认识到,要想进行灵活的事件编程,我们就老老实实地去在源代码里边好好去声明事件(包括实现INofiypropetyChanged、DependencyPropety等等所蕴含的事件通知)就行了,用不着非要再编译完之后再去画蛇添足地编织什么AOP代码(实际上就是破坏代码)。

我对这种东西持否定态度,对应用它的团队和产品持“等着看笑话”态度。
------解决方案--------------------
很简单。要想体会到它的好处取决于你需要这样一个场景。

你的开发团队有2个以上的人,并且你们有合作关系,而不是个人开发一块,你负责为另一个开发者提供代码,而不是直接编写为最终用户使用的程序。

那么无论IOC还是AOP,它的好处出来了。你希望你写出通用的程序,所谓通用就是你写一个可以给你的同事直接使用的代码。但是因为要适应各种需求,其中某些需要变化的代码需要留给他来写。那么你需要留出“占位符”,或者说“注入点”,也可以说“可扩展点”。你允许别人把他们的代码插入其中。