我正在使用nx工作区和nestjs。我想在nestjs app中的多个模块中注入一个值。
最终目标是重现与vsavkin mentioned for Angular类似的配置管理方式
但它似乎不可能,或者我错过了一些东西。
Nest无法解析FeatureService(?)的依赖关系。请确保在FeatureModule上下文中索引[0]处的参数可用。
如何通知FeatureModule
它需要访问此全局注入值?
这在AppService
(根模块中的服务)中工作正常,但不在任何子模块中。
这是我的代码如下。或者关于codesandbox.io的完整示例
app.module.ts
@Module({
imports: [
FeatureModule
],
controllers: [
AppController
],
providers: [
AppService,
{
provide: 'MY-TOKEN',
useValue: 'my-injected-value',
}
],
})
export class AppModule {}
feature.module.ts
@Module({
imports: [],
controllers: [],
providers: [
FeatureService
],
})
export class FeatureModule {
}
feature.service.ts
@Injectable()
export class AppService {
constructor(
@Inject('MY-TOKEN') private injectedValue: string
) {}
}
引自NestJS official documentation:
在Angular中,提供者在全球范围内注册。一旦定义,它们随处可用。另一方面,Nest将提供程序封装在模块范围内。您无法在不导入模块提供程序的情况下使用其他模块提供程序。但有时,您可能只想提供一组应该始终可用的东西 - 开箱即用,例如:帮助程序,数据库连接等等。这就是为什么你能够使模块成为全局模块的原因。
所以你可以做的就是用MY-TOKEN
提供者定义一个全局模块:
@Global()
@Module({
providers: [
{
provide: 'MY-TOKEN',
useValue: 'my-injected-value',
}
],
exports: ['MY-TOKEN'],
})
export class GlobalModule {}
然后您可以使用其导出的值而无需在任何位置导入全局模块。