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