如何向导入的NestJS模块传递配置?依赖问题与实例重复方案求助
NestJS ConfigurableModuleBuilder跨模块传递Provider依赖问题
场景说明
我的AppModule正在导入LibModule,LibModule通过ConfigurableModuleBuilder实现可配置,需要接收AppModule提供的LibConfigService作为配置来源(比如数据库凭据这类变量)。
报错信息
UnknownDependenciesException [Error]: Nest can't resolve dependencies of the CONFIGURABLE_MODULE_OPTIONS[00e119fde6574ffee9304] (?). Please make sure that the argument LibConfigService at index [0] is available in the LibModule context. Potential solutions: - Is LibModule a valid NestJS module? - If LibConfigService is a provider, is it part of the current LibModule? - If LibConfigService is exported from a separate @Module, is that module imported within LibModule? @Module({ imports: [ /* the Module containing LibConfigService */ ] })
我的猜想
我怀疑问题源于模块初始化顺序:LibModule在AppModule提供LibConfigService之前就被导入了。虽然理论上不存在循环依赖,但Nest的模块初始化是严格的单向流程,导致LibModule上下文无法找到LibConfigService。
当前临时方案的问题
我发现了未文档化的provideInjectionTokensFrom字段,取消app.module.ts中对应行的注释后能解决报错,但会引发新问题:LibConfigService被实例化两次——一次来自provideInjectionTokensFrom的配置,一次来自AppModule的providers数组。
该字段的注释说明如下,我不确定是否误用了它:
/** * List of parent module's providers that will be filtered to only provide necessary * providers for the 'inject' array * useful to pass options to nested async modules */
提问
请问有没有正确实现该需求的方法?
内容的提问来源于stack exchange,提问作者OoDeLally
相关产品推荐
相关产品推荐

