nestjs之定义provider的几种方式

发布时间:2024年01月18日

在NestJS中可以以多种方式自定义Providers。以下是一些常见的方法:

1. 值提供者(Value Providers)

值提供者用于提供一些硬编码的值,例如配置对象或常量。这类提供者通过 useValue 关键字来指定要注入的值。

使用过程

  1. 在你的模块中定义一个值提供者。
  2. 使用 provide 属性来指定令牌(通常是一个字符串或符号)。
  3. 使用 useValue 属性来提供一个硬编码的值。

示例

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

@Module({
  providers: [
    {
      provide: 'API_KEY',
      useValue: '12345-ABCDE',
    },
  ],
})
export class AppModule {}

2. 类提供者(Class Providers)

类提供者用于将类实例作为依赖注入。这是最常见的提供者类型,通常用于服务类。

使用过程

  1. 创建一个服务类。
  2. 在模块的 providers 数组中使用该类。
  3. 使用 provide 关键字指定一个令牌,并使用 useClass 来指定类。

示例

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

class MyService {
  // 服务逻辑
}

@Module({
  providers: [
    {
      provide: 'MyService',
      useClass: MyService,
    },
  ],
})
export class AppModule {}

3. 工厂提供者(Factory Providers)

工厂提供者通过工厂函数来创建提供者实例。这种方式适用于需要动态创建依赖项的场景。

使用过程

  1. 定义一个工厂函数,该函数返回提供者的实例。
  2. 在模块的 providers 数组中使用这个工厂函数。
  3. 使用 provide 关键字指定一个令牌,并使用 useFactory 来指定工厂函数。

示例

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

@Module({
  providers: [
    {
      provide: 'ASYNC_CONNECTION',
      useFactory: async () => {
        const connection = await createConnection();
        return connection;
      },
    },
  ],
})
export class AppModule {}

4. 异步提供者(Async Providers)

异步提供者是工厂提供者的一个变种,允许在提供者实例化之前执行一些异步操作。

使用过程

  1. 创建一个异步的工厂函数。
  2. 在模块的 providers 数组中使用这个异步函数。
  3. 使用 provide 关键字指定一个令牌,并使用 useFactory 来指定异步工厂函数。

示例

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

@Module({
  providers: [
    {
      provide: 'ASYNC_CONNECTION',
      useFactory: async () => {
        const connection = await createConnection();
        return connection;
      },
    },
  ],
})
export class AppModule {}

5. 别名提供者(Alias Providers)

别名提供者用于为已存在的提供者创建一个别名。

使用过程

  1. 定义一个服务或提供者。
  2. 创建一个别名提供者,并使用 useExisting 指向现有的服务或提供者。

示例

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

class ActualService {
  // 实际服务的逻辑
}

@Module({
  providers: [
    ActualService,
    {
      provide: 'AliasService',
      useExisting: ActualService,
    },
  ],
})
export class AppModule {}

6. 多提供者(Multi Providers)

多提供者用于在一个令牌下注册多个提供者,通常用于创建插件系统或聚合相同类型的服务。

使用过程

  1. 在模块的 providers 数组中定义多个提供者。
  2. 所有这些提供者使用相同的令牌,并将 multi 属性设置

true

示例

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

class MyService {
  // 服务逻辑
}

class AnotherService {
  // 另一个服务的逻辑
}

@Module({
  providers: [
    {
      provide: 'MY_SERVICE',
      useClass: MyService,
      multi: true
    },
    {
      provide: 'MY_SERVICE',
      useClass: AnotherService,
      multi: true
    },
  ],
})
export class AppModule {}

以上是 NestJS 中六种自定义提供者的具体使用过程。这些提供者可以灵活地应用于各种场景,满足不同的开发需求。

文章来源:https://blog.csdn.net/qq_35094120/article/details/135668826
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。