如何将构造函数参数传递给 NestJS 提供者?
我有一些服务,它需要在其构造函数中使用配置对象文字,如下所示:
@Injectable()
export class BatteriesService {
constructor(private config: Config) { }//The provider needs a config object
}
如果我只是将此类添加到模块的提供者数组中,我显然会收到错误,因为缺少构造函数参数。
因此,我需要以某种方式创建一个实例,而不是仅仅引用 BatteriesService 类。我尝试了这个:
@Module({
controllers: [BatteriesController],
providers: [{
useFactory: ()=>{
return new BatteriesService({'someProp': 'someValue'})
},
provide:'BatteriesService'
}]
})
还有这个:
@Module({
controllers: [BatteriesController],
providers: [{
useValue:new BatteriesService({'someProp': 'someValue'}),
provide:'BatteriesService'
}]
})
在这两种情况下我都会收到以下错误:
错误:Nest 无法解析 BatteriesController 的依赖关系(?)。 请确保索引 [0] 处的参数 BatteriesService 是 在 BatteriesModule 上下文中可用。
如何才能做到这一点,而不“诉诸”绕过 DI 系统,或创建另一个“内部”提供程序(配置)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您需要使用 DI 时,必须在模块中定义。
在您的情况下,
您的错误是您实际上并未导入 ConfigModule,而您的服务依赖于它。
如果您希望使用
useFactory
方法,那么看起来我假设您的
Config
实际上是 Nest ConfigModule。但如果它是一些自定义模块,您仍然需要像上面的示例一样导入它。
如果你想传递一个对象文字作为配置尝试这个
When you need to have DI in service that has to be defined in the module.
In your case
Your mistake is that you don't actually import
ConfigModule
while your service is dependent on it.If you wish to use
useFactory
method then it would look likeI assumed your
Config
is actually Nest ConfigModule.But if it's some custom Module you still need to import it as in the above examples.
If you want to pass an object literal as a config try this