依赖注入 在软件工程中依赖注入dependency injection缩写为 DI是一种软件设计模式也是实现控制反转的其中一种技术這种模式能让一个物件接收它所依赖的其他物件依赖是指接收方所需的对象注入是指将依赖传递给接收方的过程在注入之后接收方才会调用该依赖此模式确保了任何想要使用给定服务的物件不需要知道如何建立這些服务取而代之的是连接收方物件像是 client也不知道它存在的外部代码注入器提供接收方所需的服务 注编程语言层次下接收方为对象和 class依赖为变量在提供服务的角度下接收方为客户端依赖为服务 该设计的目的是为了分离关注点分离接收方和依赖从而提供松耦合以及代码重用性 传统编程方式客户对象自己创建一个服务实例并使用它这带来的缺点和问题是 如果使用不同类型的服务对象就需要修改重新编译客户类 客户类需要通过配置来适配服务类及服务类的依赖如果程序有多个类都使用同一个服务类这些配置就会变得复杂并分散在程序各处 难以单元测试本来需要使用服务类的 mock 或 stub在这种方式下不太可行 依赖注入可以解决上述问题 使用接口或抽象基类来抽象化依赖实现 依赖在一个服务容器中注册客户类构造函数被注入服务实例框架负责创建依赖实例并在没有使用者时销毁它