我在某处读到,IOC 与工厂模式不同。由于工厂设计模式更具侵入性,而依赖注入则不然。
有人可以详细说明一下吗?
我在某处读到,IOC 与工厂模式不同。由于工厂设计模式更具侵入性,而依赖注入则不然。
有人可以详细说明一下吗?
是的,IoC 和 Factory 是两个不同的东西。IoC 实际上是一个更通用的术语,很多东西都可以称为 IoC,因此它有助于进一步完善您所指的内容。例如,从技术上讲,任何回调或事件都被视为 IoC 的实现。然而,大多数人在谈论 IoC 时指的是依赖注入。
您可以使用工厂来实现控制反转,就像您可以使用依赖注入来实现它一样。
您可能想到的是一个依赖注入容器,例如 Unity、Windows 或 Ninject。DI 容器是一种被美化的抽象泛型工厂,但它做的远不止这些,包括对象生命周期管理、条件绑定等……
将模式(IoC 或 DI)与实现(工厂、DI 容器、Poor mans DI 等)分开很重要,即使实现本身也可能是模式。
控制容器的反转主要不用于依赖注入。这是让容器控制你的对象的生命周期。因此inversion of control
.
这就是为什么在容器中注册东西时总是指定生命周期(或者只使用默认生命周期)
但是,由于容器会为您创建对象,因此它还可以提供依赖注入作为额外功能。所以这真的是一个奖金。
另一方面,工厂模式应该总是创建一个新对象。工厂模式的目的只是为您创建正确的实现。