无需登录 数据私有 本地保存

依赖注入容器演示 - 理解 IoC 原理

10
0
0
0
快速上手指南

本教程将引导您完成依赖注入容器演示工具的全部操作,帮助您快速理解 IoC 容器的工作原理。请按照以下步骤依次操作。

第一步:了解界面布局

打开工具页面后,您将看到以下四个主要区域:

  • 操作按钮区:位于页面顶部,包含"注册所有预设服务"、"解析 UserController"、"再次解析(对比)"和"清空容器"四个核心操作按钮
  • 容器注册表:位于左侧,实时显示容器中已注册的服务列表和数量
  • 依赖关系图:位于右侧,以图形化方式展示接口、实现和目标类之间的依赖关系
  • 实例检查器与容器日志:位于下方,分别显示实例详情和容器操作日志

初始状态下,容器为空,注册表显示"尚未注册任何服务",日志显示"容器已就绪,等待操作"。

第二步:注册预设服务

点击"注册所有预设服务"按钮,工具将自动注册以下四组服务:

接口/抽象具体实现说明
ILoggerConsoleLogger日志服务 - 用于记录应用程序运行信息
IUserRepositoryUserRepository用户仓储 - 用于数据持久化操作
IEmailServiceEmailService邮件服务 - 用于发送电子邮件
UserControllerUserController目标类 - 依赖以上三个服务的控制器

注册完成后,观察容器注册表中显示的服务数量变化(应显示 4 个服务),以及依赖关系图中连接线从虚线变为实线的变化。容器日志会记录每个服务的注册过程。

第三步:解析 UserController

点击"解析 UserController"按钮,观察容器执行依赖解析的完整过程。这是理解 DI 核心机制的关键步骤。

容器将执行以下操作:

  1. 查找 UserController 的构造函数参数,发现它依赖 ILogger、IUserRepository 和 IEmailService
  2. 在注册表中查找 ILogger 的实现,找到 ConsoleLogger,创建实例
  3. 在注册表中查找 IUserRepository 的实现,找到 UserRepository,创建实例
  4. 在注册表中查找 IEmailService 的实现,找到 EmailService,创建实例
  5. 将三个实例注入到 UserController 的构造函数中,创建 UserController 实例

查看容器日志,可以看到上述每一步操作的详细记录。查看实例检查器,可以看到 UserController 实例的类型信息和创建时间。

第四步:再次解析对比实例

再次点击"解析 UserController"(或点击"再次解析(对比)"按钮),对比两次解析的结果差异。这是理解 Singleton 和 Transient 生命周期区别的最佳实践。

观察实例检查器中的实例信息:

  • 如果服务注册为 Singleton(单例):两次解析返回的是同一个实例,实例 ID 相同
  • 如果服务注册为 Transient(瞬态):每次解析都创建新实例,实例 ID 不同

通过反复对比解析,您可以直观感受不同生命周期策略对实例创建和复用的影响,这是在实际项目中选择合适生命周期的重要依据。

第五步:清空容器并重新注册

点击"清空容器"按钮,所有已注册的服务和已创建的实例将被清除。注册表恢复为空状态,依赖关系图中的连接线变回虚线。

清空后,您可以尝试以下操作来加深理解:

  • 仅注册部分服务(如只注册 ILogger),然后尝试解析 UserController,观察当依赖缺失时容器的行为和错误提示
  • 清空后重新注册全部服务,再次进行解析,验证容器行为的一致性
  • 观察日志中清空操作的记录,了解容器如何管理内部状态
第六步:阅读 FAQ 巩固知识

完成上述操作后,建议浏览页面底部的常见问题(FAQ)板块。FAQ 中涵盖了 IoC 控制反转的定义、依赖注入的三种方式(构造函数注入、属性注入、方法注入)、Singleton 与 Transient 的详细对比、DI 容器的核心优势、主流 DI 框架介绍以及循环依赖问题的解决方案等核心知识点。将实践操作与理论知识结合,能够帮助您建立对依赖注入机制的全面认知。