IoC和DI [duplicate]之间的确切区别是>

问题描述 投票:36回答:2

可能重复:

Inversion of Control < Dependency Injection

我总是在同一上下文中阅读IoC(控制反转)和DI(依赖项注入)。 IoC和DI到底有什么区别? IoC与DI有何不同?

可能重复:控制反转

在通常情况下,这些术语已有些同义。 IoC的最初想法-控制反转-与“好莱坞原则”非常相关:不要叫我们,我们会叫你

在传统应用程序中,开发人员将编写业务代码和框架代码。然后,业务代码将调用框架代码以完成任务。在IoC模型下,您可以“反转”该模型并创建一个接受业务模块并调用它们以完成任务的框架。在一些开发框架中都展示了此原理,包括旧的Smart Client Software Factory

和新的Prism(或WPF / Silverlight的复合应用程序)。在这些模型中,UI模块已向IoC容器注册,并根据配置和用户操作根据需要加载。这些模型虽然功能强大,但也往往具有非常陡峭的学习曲线。

[依赖注入是一种通过允许外部调用者将依赖对象注入到类/方法中]从实现中删除内部依赖的技术(实际上很难称其为模式)。 IoC框架使用依赖注入将用户模块和其他依赖代码提供给框架例程,以“将它们全部粘合在一起”。 IoC框架大量使用依赖注入,因为这是允许它们“呼叫您”的机制。

IoC容器,例如Castle Windsor和Structure Map,通过提供您注册的类的自动实例化和生命周期管理来帮助进行依赖项注入-包括自动实例化和注入已注册类所需的参数。所有这些使依赖注入更容易使用,但这不是必需的。

依赖关系注入是一种灵活性机制,可最大化对接口的依赖关系,同时最大程度地减少对特定实现的依赖。因此,使用依赖项注入的系统可以支持可根据情况使用的“可插入”实现类。这种“可插入性”的一个很大的好处是它使创建单元测试变得更加容易。您可以将对象模拟到所需的接口,然后将其注入测试对象。

因此,IoC实际上是更广泛的原理,而DI是其中的一项基本技术。 IoC(好莱坞原理)系统往往非常复杂,可能难以理解,因此学习曲线陡峭。另一方面,对于日常开发人员来说,DI是一个好习惯。我倾向于宁可理解又清晰,而不是冷静但复杂。

IoC是更改合同执行的能力。

DI是提供实施的能力。

dependency-injection inversion-of-control
2个回答
69
投票

在通常情况下,这些术语已有些同义。 IoC的最初想法-控制反转-与“好莱坞原则”非常相关:不要叫我们,我们会叫你


57
投票

IoC是更改合同执行的能力。

© www.soinside.com 2019 - 2024. All rights reserved.