掌握依赖注入容器的核心概念是理解现代软件架构设计的基础。以下术语涵盖了本工具演示中涉及的全部关键概念,每个术语均包含定义、要点说明以及与本工具的对应关系。
IoC 控制反转(Inversion of Control)
控制反转是一种设计原则,将对象创建和依赖管理的控制权从程序代码内部转移给外部容器或框架。传统方式中,类自己负责创建其依赖对象(使用 new 关键字),控制权在类内部。IoC 将这一控制权"反转"给容器,类只需声明需要什么依赖,由容器统一管理和注入。IoC 的核心价值在于降低组件间的耦合度,提高代码的可测试性和可替换性。在本工具中,容器就是 IoC 原则的具体实现,它接管了 UserController 及其依赖的创建和管理职责。
DI 依赖注入(Dependency Injection)
依赖注入是实现控制反转的主要技术手段,由 Martin Fowler 在 2004 年正式提出。它通过外部机制将依赖对象"注入"到目标对象中,而不是让目标对象自己创建依赖。依赖注入有三种主要方式:构造函数注入(通过构造函数参数传入依赖,最推荐)、属性注入(通过公开属性设置依赖,灵活但可能遗漏)和方法注入(通过特定方法传入依赖,较少使用)。本工具演示中主要使用构造函数注入方式,在 UserController 的构造函数中注入 ILogger、IUserRepository 和 IEmailService。
DI 容器(DI Container)
DI 容器也称为 IoC 容器,是依赖注入模式的核心运行时组件。它负责管理应用中所有服务的注册、解析和生命周期。容器维护一个服务注册表,记录每个接口/抽象类型到具体实现类型的映射关系。当需要某个服务时,容器自动解析其依赖关系链、创建所需的全部实例并完成组装。主流的 DI 容器框架包括 .NET 的 Microsoft.Extensions.DependencyInjection、Java 的 Spring IoC Container、JavaScript 的 InversifyJS 等。本工具通过模拟一个简化版的 DI 容器,帮助用户理解容器的内部运作机制。
服务注册(Service Registration)
服务注册是将服务的类型映射关系添加到 DI 容器中的过程。注册时需要指定服务类型(通常是接口或抽象类)和其实现类型(具体类),容器根据这些映射关系在解析时创建正确的实例。常见的注册方式包括:注册为 Singleton(单例)、Transient(瞬态)或 Scoped(作用域)。在本工具中,点击"注册所有预设服务"按钮后,容器内部会建立 ILogger 到 ConsoleLogger、IUserRepository 到 UserRepository 等映射关系,这些信息存储在容器注册表中供后续解析使用。
UD5工具箱