nestjs之provider的provide取值的几种方式

以下是根据上述每种 provide 取值方式的例子,展示在 NestJS 中如何定义和使用自定义 providers。

1. 字符串

在这个例子中,我们将使用字符串 'MY_SERVICE' 作为 provider 的标识符。

首先,定义 provider:

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

@Injectable()
export class MyService {
  doSomething() {
    return 'Doing something!';
  }
}

// 在模块中注册 provider
import { Module } from '@nestjs/common';

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

接着,在其他部分的应用中注入这个 provider:

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

@Injectable()
export class SomeOtherService {
  constructor(@Inject('MY_SERVICE') private myService: MyService) {}

  someMethod() {
    return this.myService.doSomething();
  }
}

2. 符号(Symbol)

在这个例子中,我们将使用 Symbol 作为 provider 的唯一标识符。

首先,创建一个 Symbol

export const MY_SERVICE_TOKEN = Symbol('MyService');

然后定义 provider:

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

@Injectable()
export class MyService {
  doSomething() {
    return 'Doing something!';
  }
}

// 在模块中注册 provider
import { Module } from '@nestjs/common';
import { MY_SERVICE_TOKEN } from './constants';

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

在其他部分的应用中注入这个 provider:

import { Injectable, Inject } from '@nestjs/common';
import { MY_SERVICE_TOKEN } from './constants';

@Injectable()
export class SomeOtherService {
  constructor(@Inject(MY_SERVICE_TOKEN) private myService: MyService) {}

  someMethod() {
    return this.myService.doSomething();
  }
}

3. 类型(Class)

在这个例子中,我们将直接使用一个类 MyService 作为 provide 的值。

定义 provider:

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

@Injectable()
export class MyService {
  doSomething() {
    return 'Doing something!';
  }
}

// 在模块中注册 provider
import { Module } from '@nestjs/common';

@Module({
  providers: [MyService],
})
export class MyModule {}

在其他部分的应用中注入这个 provider:

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

@Injectable()
export class SomeOtherService {
  constructor(private myService: MyService) {}

  someMethod() {
    return this.myService.doSomething();
  }
}

4. 已存在的 Provider

在这个例子中,我们将创建一个 provider,并将其映射到已存在的另一个 provider。

定义原始 provider:

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

@Injectable()
export class MyService {
  doSomething() {
    return 'Doing something!';
  }
}

// 在模块中注册 provider
import { Module } from '@nestjs/common';

@Module({
  providers: [MyService],
})
export class MyModule {}

然后创建一个映射到 MyService 的新 provider:

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

@Module({
  providers: [
    {
      provide: 'ALIAS_FOR_MY_SERVICE',
      useExisting: MyService,
    },
  ],
})
export class AliasModule {}

在其他部分的应用中注入这个新 provider:

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

@Injectable()
export class SomeOtherService {
  constructor(@Inject('ALIAS_FOR_MY_SERVICE') private myService: MyService) {}

  someMethod() {
    return this.myService.doSomething();
  }
}

在每个例子中,我们演示了如何根据不同的 provide 取值方式定义和使用 NestJS 中的自定义 provider。

你可能感兴趣的:(nestjs原理,javascript,前端)