以下是根据上述每种 provide
取值方式的例子,展示在 NestJS 中如何定义和使用自定义 providers。
在这个例子中,我们将使用字符串 '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();
}
}
在这个例子中,我们将使用 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();
}
}
在这个例子中,我们将直接使用一个类 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();
}
}
在这个例子中,我们将创建一个 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。