关于C#:傻瓜的控制反转(IoC /依赖注入)

Inversion of Control (IoC / Dependency Injection) for Dummies

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is Inversion of Control?

好吧,我是这个网站的新手,我看到人们真的很愿意帮忙,所以IMMA利用这个机会,如果你不介意的话,就再问一个问题。

所以,我已经准备了很多了,我发誓,但是,我就是想不出来。世界上什么是控制反转(IOC或依赖注入)?为什么ASP.NET MVC+存储库模式项目会如此频繁地使用它?最后,他们所说的"容器"是什么意思,当他们说"注入我的控制器"时?

我知道这可能是一个老话题(甚至是一个愚蠢的问题),但我似乎找不到任何关于傻瓜的答案。


把控制的依赖注入/反转想象成一个大对象工厂,一个声明性的、配置驱动的虚拟构造函数。不要将代码与调用硬连接到客户机类使用的具体类型的"new"混淆,而是让虚拟构造函数为您实例化对象。

这么复杂的事情给你带来了什么好处?

对象创建现在是一个声明性的东西。如果您碰巧将设计建立在适当的接口上,您可以要求对象工厂在方便时创建一个实现相同接口的代理。现在各种各样的好事情都是可能的:面向方面的编程、透明的远程处理、声明性事务等。


简单的回答:它允许您提交任何给定对象将用于完成其工作的"事物"。

人为的例子:假设对象为了某个目的想要得到时间,你给它一个"ITimeService",它就在上面调用了"GetTime"。

这样做的目的是为了"消除"课堂与你不希望的事物之间的硬关系,并帮助测试。

在我看来,有些人有点过分了,但是测试论证是一个有效的论证,而且它确实是一种有时可以采用的方法。

更复杂的答案是:马丁·福勒关于控制反转。