如何使用 NestJS 中的依赖注入
2023-09-24 15:14:27
前言
首先,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 应用到您的应用程序中。您还可以创建自己的自定义提供程序来满足您的特定需求。