我尝试使用 registerAsync 导入模块并使用模块中的提供程序配置它,但它会抛出错误,无法找到该提供程序。我缺少什么?
我的代码:
import { CacheModule, Module } from '@nestjs/common';
@Module({
imports: [
CacheModule.registerAsync({
useFactory: async (options) => ({
ttl: options.ttl,
}),
inject: ['MY_OPTIONS'],
}),
],
providers: [
{
provide: 'MY_OPTIONS',
useValue: {
ttl: 60,
},
},
],
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)
错误:
错误:Nest 无法解析 CACHE_MODULE_OPTIONS 的依赖关系(?)。请确保索引 [0] 处的参数 MY_OPTIONS 在 CacheModule 上下文中可用。
上面的例子是我的代码的简化。但主要问题保持不变:我在 AppModule 中有一个提供程序,并且我在 CacheModule.registerAsync() 函数中需要它。
如果有人想尝试解决这个问题,我做了一个非常简单的存储库:https ://github.com/MickL/nestjs-inject-existing-provider
我想说问题是“CacheModule.registerAsync”和“AppModule”在不同级别工作,因此在“AppModule”上定义提供程序并不使其可用于“CacheModule.registerAsync”。
假设我们将“MY_OPTIONS”移动到另一个模块:“CacheConfigModule”,它可能看起来像:
CacheConfigModule.ts
import { Module } from '@nestjs/common';
@Module({
providers: [
{
provide: 'MY_OPTIONS',
useValue: {
ttl: 60
}
}
],
exports: ['MY_OPTIONS']
})
export class CacheConfigModule {}
Run Code Online (Sandbox Code Playgroud)
AppModule.ts
import { CacheModule, Module } from '@nestjs/common';
import { CacheConfigModule } from './CacheConfigModule';
@Module({
imports: [
CacheConfigModule,
CacheModule.registerAsync({
imports: [CacheConfigModule],
useFactory: async (options) => ({
ttl: options.ttl
}),
inject: ['MY_OPTIONS']
})
]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4048 次 |
| 最近记录: |