# 依赖注入（Dependency Injection）

### 缩写：无

### 简述

由外部提供组件所依赖的协作对象，而非在内部硬编码创建的技术。利于替换实现、测试与配置；可通过构造注入、组装根或容器完成。注入解决组装，不自动解决生命周期与作用域。

### 使用场景

服务组装、测试替身、多环境配置。

### 实践与应用

```text
// 构造时注入，而非内部 new
Service(db, clock)
// 而不是
Service() { this.db = new Db() }
```
### 注意事项

• 容器过度魔法
• 循环依赖
• 作用域错误（单例持有请求态）

### 关联术语

• 接口：被注入的常为抽象依赖
• 控制反转：组装责任外移的更广概念
• 测试替身：注入假实现以便单测
• 组合根：集中组装对象图的位置
