以下是根据上述每种 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。