我正在使用nx工作区和nestjs。 我想在nestjs应用程序的多个模块中注入一个值。
最终目标是重现与vsavkin mentioned for Angular
类似的配置管理方式但是似乎不可能,或者我错过了一些东西。
嵌套无法解析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
) {}
}
答案 0 :(得分:1)
NestJS official documentation的报价:
在Angular中,提供程序在全局范围内注册。定义后,它们随处可见。另一方面,Nest将提供程序封装在模块范围内。如果不导入模块提供程序,则无法在其他地方使用它们。但是有时候,您可能只想提供一组应始终可用的东西-开箱即用,例如:助手,数据库连接等等。这就是为什么您可以将模块设为全局模块。
因此,您可以做的只是与该MY-TOKEN
提供者定义一个全局模块:
@Global()
@Module({
providers: [
{
provide: 'MY-TOKEN',
useValue: 'my-injected-value',
}
],
exports: ['MY-TOKEN'],
})
export class GlobalModule {}
,然后您可以使用其导出的值,而无需在任何地方导入全局模块。