.Net 工厂和容器的区别?

.Net Diference between Factory and Container?

我从未使用过 ioc-Container,但据我所知,以 "Container" 为后缀的对象在我看来似乎是一个从 configuration/context 读取的工厂,发挥它的魔力 [=17] =] 根据读取 configuration/context.

的具体类型的对象

我缺少哪些关键方面? 使用容器似乎增加了复杂性(这对开发、重构和配置来说很耗时),在哪里使用以及主要好处是什么?

IoC 容器和工厂都构建其他对象,但相似之处仅此而已。

工厂是一个知道如何构建其他对象的对象。它封装了额外的逻辑,可能是配置时间信息等。它可以构建多个相关类型的对象,例如从对象层次结构。但是它可以构建的对象数量是工厂结构的一部分。因此,您可能有一个 SqlConnectionFactory 或 RequestHandlerFactory,它们知道要构建哪种类型的 SqlConnections 或 RequestHandler,但如果您想构建 InputValidator,则需要创建一个新工厂。

IoC 容器是一种用于帮助反转控制模式的工具。但这并不是严格需要的。 IoC 使您明确对象具有哪些依赖项,并使您在对象 created/initialized 时提供这些依赖项。如果做得好,这有助于分离关注点、组件之间的解耦、单元测试等,并且通常会使生成的代码 "better"。但是由于手动连接对象图很麻烦,因此出现了一些自动完成此操作的框架,无论是从外部配置还是从代码注释。这些被称为 IoC 容器。它们初始化对象的方式比工厂更通用。你可以要求它构建任何类型的对象,只要它对这些对象有所了解(构造函数的签名,在最简单的情况下),它就可以构建它们。

IoC 容器使用工​​厂比反过来更常见。在我看到的大部分代码中,除了最复杂的对象之外,所有对象对工厂的需求都大大减轻了。