1
17
Inversion of Control 是一个非常通用的概念,根据你所说的“控制”的类型,有不同的含义。依赖注入是一种特殊的形式。 控制反演与迭代 在这种情况下,“控制”是指“流量控制”。 我认为您的第一个涉及迭代的示例并不是真正的控制反转,因为该代码显式地执行流控制。控制反转将要执行的操作与流控制分离。它可能看起来像这样(请原谅我的java/C#):
visitor对象为它访问的每个集合元素执行一些操作,例如更新sum counter字段。但它没有
控制
如何或何时由集合调用,因此
控制反转
. 您还可以实现
在这种情况下,“控制”是指“控制如何创建和连接组件”。 在任何一个非平凡的应用程序中,代码都被分解成需要协作的组件。为了保持组件的可重用性,它们不能直接创建彼此,因为这样会永久地将它们粘合在一起。而是单个组件 放弃控制权 Dependency injection 是实现这一点的一种方法,通过引用构造函数中的collaborator对象。然后,您需要一段单独的启动代码,在其中创建所有组件并将其连接在一起,或者需要一个依赖项注入框架来为您解决这个问题。Dice类确实是依赖注入的一个例子。 另一种放弃对对象图构造控制的方法是 Service Locator disadvantages . |
2
1
让我试着回答。 你的第一个例子是两者都不是。它只是一个模板。 要使其成为依赖注入,必须选择一个实现,并将其提供给模板。
您的第二个示例看起来像DI/IoC的消费者。将引擎的实现发送到类中的代码将是DI/IoC组件。 希望这是准确的,而且有帮助。 |
StayCool · Ninject。扩展。约定不会绑定单个接口 6 年前 |
Nickso · 通用属性和IoC(Autofac)问题 7 年前 |
LightCC · 如何在C中设置DI/IoC和/或工厂模式设计# 7 年前 |
Eitan · 使用Castle动态代理拦截所有依赖项 7 年前 |