傻瓜的控制反转(IoC /依赖注入)[重复]
Posted
技术标签:
【中文标题】傻瓜的控制反转(IoC /依赖注入)[重复]【英文标题】:Inversion of Control (IoC / Dependency Injection) for Dummies [duplicate] 【发布时间】:2011-05-27 23:33:49 【问题描述】:可能重复:What is Inversion of Control?
好的,我是这个网站的新手,我看到人们真的很愿意提供帮助,所以我可以利用这一点,如果你不介意的话,可以再问一个问题。
所以,我读了很多书,我发誓,但是,我似乎无法弄清楚。什么是控制反转(IoC 或依赖注入)?为什么 ASP.NET MVC + Repository Pattern 项目使用它这么多?最后,他们所说的“容器”是什么意思?什么时候说“注入我的控制器”?
我知道这可能是一个老话题(甚至是一个愚蠢的问题),但我似乎无法得到任何愚蠢的答案。
【问题讨论】:
***.com/questions/3058/what-is-inversion-of-control 谢谢,*** 是一个非常大的地方。 【参考方案1】:将依赖注入/控制反转视为一个大型对象工厂,一个声明性的、配置驱动的虚拟构造函数。您现在将让虚拟构造函数为您实例化对象,而不是通过调用硬连线客户端类使用的具体类型的“new”来乱扔代码。
所有这些复杂性为您带来的优势是什么?
对象创建现在是一个声明性的事情。如果您碰巧将您的设计基于适当的接口,您可以要求对象工厂在方便时创建一个实现相同接口的代理。现在各种好事都成为可能:面向方面的编程、透明的远程处理、声明式事务等。
【讨论】:
谢谢,我很期待学习这种模式。看起来很有用。【参考方案2】:简单的答案:它让您交出任何给定对象将用来完成其工作的“东西”。
人为的例子:假设对象出于某种目的想要获取时间,你给它一个“ITimeService”,然后它调用“GetTime”。
这样做的目的是为了“解耦”类与你可能不希望的事情的硬关系,并帮助测试。
以我的拙见,有些人有点过火了,但测试论点是有效的,当然它有时是一种有用的方法。
更多相关回答:Martin Fowler on Inversion of Control。
【讨论】:
@Diego:我没有具体描述你所指的东西,但是从应用一般原则来看,这意味着存储库(即获取数据的地方)被传递给所有需要它的类;认为您可以在 TestRepository 和 TextFileRepository 或 SomeOtherTypeOfRepository 之间交换它。 我同意 - 我已经使用 .Net 进行了 13 年以上的编程,并且我创建了从简单的网站到非常复杂的门户的任何内容。我只遇到过几次使用 DI 派上用场的情况。通常有一种更简单的方法来完成它。 @NoonSilk 所以如果我有一个 IBalloon 对象.. 我可以将 ("pink", "elephant") 传递给该对象,然后我会得到一个粉红色的大象气球?是这样吗?以上是关于傻瓜的控制反转(IoC /依赖注入)[重复]的主要内容,如果未能解决你的问题,请参考以下文章