返回

如何使用 NestJS 中的依赖注入

前端

前言

首先,NestJS 是什么?引用其官网的原话:“一个渐进的 Node.js 框架,用于构建高效、可靠且可扩展的服务器端应用程序。”NestJS 使用了一种称为依赖注入 (DI) 的设计模式。DI 是一种软件设计模式,它允许您将对象的创建和管理与使用该对象分离。这使得您的代码更易于测试和维护。

理解依赖注入

在 DI 中,您不直接创建对象,而是将创建对象的责任委托给一个称为 DI 容器的中央机构。当您需要使用一个对象时,您只需从 DI 容器中请求它,DI 容器就会为您创建并返回该对象。

DI 的主要优点之一是它使您的代码更具可测试性。因为您可以将对象创建与使用该对象分离,所以您可以在不创建整个应用程序的情况下测试单个对象。这使得测试您的代码更加容易和快速。

DI 的另一个优点是它使您的代码更易于维护。因为您不直接创建对象,所以您不必担心如何创建它们或如何管理它们的依赖关系。这使得维护您的代码更加容易。

NestJS 中的依赖注入

NestJS 内置了一个 DI 系统,您可以使用它来轻松地将 DI 应用到您的应用程序中。NestJS DI 系统使用一种称为提供程序 (Provider) 的机制来创建和管理对象。提供程序是一个类或函数,它负责创建和返回一个对象。

要创建一个提供程序,您可以在您的模块中使用 @Injectable() 装饰器。例如:

import { Injectable } from '@nestjs/common';

@Injectable()
export class UserService {
  findAll() {
    return [];
  }
}

这个类是一个提供程序,它负责创建和返回一个 UserService 对象。当您需要使用 UserService 时,您只需从 DI 容器中请求它,DI 容器就会为您创建并返回该对象。

创建自定义提供程序

您还可以创建自己的自定义提供程序。要创建一个自定义提供程序,您需要创建一个类或函数,并将其导出为一个提供程序。例如:

import { Injectable, Provider } from '@nestjs/common';

export const MyCustomProvider: Provider = {
  provide: 'MY_CUSTOM_PROVIDER',
  useValue: 'Hello, world!',
};

这个类是一个自定义提供程序,它负责创建一个字符串并将其返回。当您需要使用这个提供程序时,您只需从 DI 容器中请求它,DI 容器就会为您创建并返回该字符串。

总结

DI 是一种强大的设计模式,它可以使您的代码更易于测试和维护。NestJS 内置了一个 DI 系统,您可以使用它来轻松地将 DI 应用到您的应用程序中。您还可以创建自己的自定义提供程序来满足您的特定需求。