加载中...
依赖注入是控制反转的一种具体实现方式,对象所依赖的其他对象不由自己创建,而是由外部容器或调用方在运行时注入进来。它降低了组件间的耦合,提升了代码的可测试性与可维护性。

| 中文名 | 依赖注入 |
| 英文名 | Dependency Injection |
| 提出者 | Martin Fowler 等推广 |
| 所属原则 | 控制反转、依赖倒置 |
| 主要方式 | 构造函数、属性、接口注入 |
依赖注入(Dependency Injection,简称DI)是一种软件设计技术,指一个对象所需要的依赖对象(服务)不再由它自己创建,而是通过构造函数、属性或方法由外部提供。它是控制反转(IoC)原则的一种常见落地方式。
依赖注入这一术语由 Martin Fowler 在其文章中推广。传统写法中,类往往在内部用 new 关键字直接实例化它依赖的对象,这导致高层模块与具体实现紧密绑定。依赖注入把创建依赖的职责交给外部,使得类只声明自己需要什么,而不关心从哪里得到,从而符合面向对象设计中的依赖倒置原则。
依赖注入是现代框架的基石。Spring、Angular、.NET Core、NestJS 等都内置了依赖注入容器。它特别适合需要在测试时替换真实依赖为模拟对象(Mock)的场景,也便于在不同环境切换配置,例如把内存数据库替换为生产数据库。
问:依赖注入和控制反转是一回事吗?答:不是。控制反转是更广的设计原则,指把控制权交给框架;依赖注入是实现控制反转的一种具体手段,专门针对如何提供依赖对象。
问:过度使用依赖注入有什么风险?答:可能导致配置复杂、依赖关系隐晦难以追踪,以及运行时才暴露的注入错误。对简单对象直接创建反而更清晰。

| 中文名 | 依赖注入 |
| 英文名 | Dependency Injection |
| 提出者 | Martin Fowler 等推广 |
| 所属原则 | 控制反转、依赖倒置 |
| 主要方式 | 构造函数、属性、接口注入 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧