Design patterns 控制反转到底是什么

Design patterns 控制反转到底是什么,design-patterns,dependency-injection,inversion-of-control,Design Patterns,Dependency Injection,Inversion Of Control,可能重复: 我理解依赖注入(DI)是什么(我想!)。它基本上是满足对象可能具有的依赖关系。我试图将我在使用DI时编写的代码视为面向服务的,并将我的代码定义为使用其他服务 然而,我现在想知道,当使用IoC时,我们到底在反转控制什么。这是一个相当模糊的术语,它可能意味着一些事情 但是,我认为这是由IoC框架处理的创建对象(并因此使用DI满足依赖关系)的责任 请求它使用的对象(即服务)仍然是应用程序的责任,区别在于它不知道(或不关心)如何创建它。那么,为什么服务定位器被认为是反模式的,如果它所做的只

可能重复:

我理解依赖注入(DI)是什么(我想!)。它基本上是满足对象可能具有的依赖关系。我试图将我在使用DI时编写的代码视为面向服务的,并将我的代码定义为使用其他服务

然而,我现在想知道,当使用IoC时,我们到底在反转控制什么。这是一个相当模糊的术语,它可能意味着一些事情

但是,我认为这是由IoC框架处理的创建对象(并因此使用DI满足依赖关系)的责任

请求它使用的对象(即服务)仍然是应用程序的责任,区别在于它不知道(或不关心)如何创建它。那么,为什么服务定位器被认为是反模式的,如果它所做的只是请求一个服务呢


我说的对吗?或者它意味着什么。此外,我是否正确地将DI和IoC的职责分开?如果我有一个IoC框架,那么没有DI框架,IoC框架就无法运行。或者DI只是IoC框架的一个功能?

控制反转基本上意味着应用程序代码不关心它需要的部分来自何处

您可以通过各种风格的依赖注入来实现IoC

与Java世界中的where相反,包装器可能通过jndi按名称请求资源。在这种情况下,代码要求满足它的需要,而不是提供它

您说过“应用程序仍然有责任请求它使用的对象(即服务),区别在于它不知道(或不关心)如何创建它。”


我不认为那是真的;组件不要求其他组件。依赖项是从更高的层次注入的,这是一种不同的语义。这就是IoC。

依赖注入通常意味着将依赖对象作为参数传递给方法,而不是让方法创建依赖对象。它在实践中的意思是,该方法不直接依赖于特定的实现;任何满足要求的实现都可以作为参数传递

控制反转只是认识到依赖关系是反向的。A不是通过创建、实现或直接调用来依赖B,而是接收B作为参数,不再以任何方式对B负责


将参数类型实现为接口简化了流程,并对其进行了概括,但这并不是严格必要的。

控制反转是一种通用模式。依赖注入就是这种模式的一种用法。更多信息,尤其是标题为“控制反转”的部分


许多人现在避免使用DI的“控制反转”一词,因为反转是与依赖注入变得普遍之前人们做事情的方式相比较的。如果你现在已经习惯了依赖注入,或者你是一个从一开始就有这种想法的幸运儿,那么试图弄清楚什么是反向的是令人困惑的。

请参见:另请参见:我不认为你提供的第一个链接正确地回答了这个问题。啊哈-实际上,这现在更有意义了。这是一个相对的术语,一旦你改变了使用依赖注入的心态,“反转”就不再有什么意义了。在我开始使用Castle Windsor之前,我已经使用依赖注入很长时间了。当时只是为了让编写单元测试变得更容易。