VContainer-about/what-is-di | 概述——DI 是什么?

依赖注入(DI)是面向对象编程中的通用技术,核心目标是消除代码中的不必要依赖。
它能提升代码的可测试性、可维护性、扩展性和模块替换能力。

在编程范式设计中,基础原则是:低耦合模块,高内聚实现。
面向对象编程(OOP)通过以下方式实现:

  1. 对象封装职责细节(封装性)
  2. 对象将非自身职责的工作委托给其他对象(委托机制)

但这种方式存在根本性问题:
如果在类代码中直接编写委托对象,意味着源码级别的强耦合。
唯一解耦的方式是从外部传入依赖项。

当类需要从外部获取依赖时,就需要依赖注入技术的支持。
DI 通过外部容器完整解析依赖关系,实现解耦。

扩展阅读:

术语

  • DI 容器: 集中管理依赖关系并自动装配。
  • 组合根: 配置依赖解析的地方。
  • 自动装配: 容器自动管理服务依赖的功能。通常由 DI 库负责。
  • IoC(控制反转): 将控制流逻辑从视图组件中抽离,传统编程中入口点通常处理用户输入等控制流。

为什么 Unity 需要 DI?

在 Unity 中,MonoBehaviour 既是 C# 代码的入口点,又是“视图组件”。

现代应用设计强调"业务逻辑与表现层分离"。

而 MonoBehaviour 往往承担过多职责(事件处理、控制流、业务逻辑调用等)。

通过 DI 容器实现控制反转(IoC)。通过 DI 容器,我们可以使纯 C# 类成为入口点(替代 MonoBehaviour)。将控制流和业务逻辑从作为视图组件的 MonoBehaviour 中分离。

视图组件在运行时动态创建/销毁,而所有“功能”(如控制流和领域逻辑)保持稳定生命周期。

最佳实践是让视图层保持无状态,与控制流和数据管理分离。

这正是 DI 在 Unity 中的核心价值。

posted @   凌雪寒  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示