傻瓜的控制反转(IoC /依赖注入)

时间:2010-12-19 21:38:39

标签: c# dependency-injection inversion-of-control

  

可能重复:
  What is Inversion of Control?

好的,我是这个网站的新手,我已经看到人们非常愿意提供帮助,所以如果你不介意的话,imma会利用这一点并提出另一个问题。

所以,我发誓很多,我发誓,但是,我似乎无法弄明白。世界上有什么反转控制(IoC或依赖注入)?为什么ASP.NET MVC + Repository Pattern项目使用它如此之多?最后,它们是什么意思“容器”,当他们说“注入我的控制器”时?

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

2 个答案:

答案 0 :(得分:5)

将依赖注入/控制反转视为一个大型对象工厂,一个声明性的,配置驱动的虚拟构造函数。通过调用“new”来乱码您的客户端类使用的具体类型,而不是乱丢您的代码,您现在将要让该虚拟构造函数为您实例化对象。

所有这些复杂性给你带来的好处是什么?

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

答案 1 :(得分:3)

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

Contrived Example:假设对象想要出于某种目的获得时间,你将其交给“ITimeService”并在其上调用“GetTime”。

这样做的目的是将课程“脱离”,使其与您可能不希望的事情建立硬关系,并帮助进行测试。

在我的拙见中,有些人有点过火,但测试论证是有效的,当然这是一种有时采用的方法。

更多参与答案:Martin Fowler on Inversion of Control