依赖注入是 Nest.js 的核心,使得开发者可以轻松管理应用程序中的依赖关系,提高代码的可测试性和可维护性。DI 是一种设计模式,它可以用来实现控制反转(IoC)—— 对象的创建和依赖关系的管理交给框架来处理而不是在代码中硬编码。

它的依赖注入主要有 3 个核心概念:

  1. Provider: 用于创建和管理的服务、仓库、工厂等的类,使用 @Injectable 装饰器进行标记,并可以在模块中注册。
  2. Injection: 将提供者的实例自动传递给需要它们的类(如控制器、服务等),通过构造函数注入来实现这一点。
  3. Module: NestJS 应用程序的基本组织单元,每个模块可以包含多个提供者,并且可以在其他模块中导入和使用这些提供者。

依赖注入的优势:

  1. 解耦:类之间的依赖关系更加松散,减少了代码的耦合度,提高了代码的可维护性
  2. 可测试性:通过依赖注入,可以轻松在测试中替换依赖项,使用模拟对象进行单元测试
  3. 可拓展性:新功能可以通过添加新的提供者来实现,而不需要修改现有代码