关于c#:什么是依赖注入,为什么我要使用它?

What is dependency injection and why would I want to use it?

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

Possible Duplicate:
What is dependency injection?

我团队中的其他开发人员一直在谈论依赖注入。我已经在维基百科上查过了,但我仍然不清楚它到底是什么,或者什么时候我想在我的设计中使用它。如果你有什么好的例子说明你什么时候用过它,或者你不应该用它,那真的会帮到我。谢谢


基本思想是,当一个对象需要其他对象来完成它的工作(例如,数据库连接)时,而不是在内部创建该对象,而是将该对象"注入"到该对象中,通常作为构造函数参数,或者由在使用该对象之前设置的公共属性进行。

这样做的好处是可以从外部更改所用对象的值(如果对象声明为接口,则这一点尤其正确)。这种方法的一个常见用途是用单元测试的模拟对象替换具体对象。


我发现来自Misko Hevery的依赖注入文章很有解释性,包括伟大的例子(Java)。看看围绕这个主题的一系列文章。


您可能会发现这篇文章对于理解整个想法很有用。

其思想是帮助您分离您的类,以便每个类都可以独立地使用或测试。


另一个可能有帮助的参考术语是"控制反转"。

IOC或DI允许您指定一个必须由其他组件满足的接口,然后在运行时为执行的应用程序提供一个满足接口组件的映射(通常是在一个为国际奥委会提供满意服务的服务容器中,作为某种服务解决方案服务)。

这种抽象使您能够更容易地用一个新的版本,甚至是一种全新的支持技术来替换不再满足组织需求的实现,从而减少变更的占用,从而降低风险。

Castle Windsor是IOC容器的.NET实现。