【问题标题】:NestJS - Inject factory provider into another provider doesn't workNestJS - 将工厂提供者注入另一个提供者不起作用
【发布时间】:2021-07-17 03:44:26
【问题描述】:

我正在尝试将嵌套自定义提供程序与工厂一起使用,出于某种原因,我正在努力使其正常工作。 我创建了以下示例 -


interface ProviderOptions: {x:string, y:number};
interface AsyncProps {useFactory:(...args:any[])=> ProviderOptions, inject:any[], imports:any[] }

@Module({})
export class MyModule {
    
   static forRootAsync(asyncProps: AsyncProps): DynamicModule {
        
     const myFactory: Provider = {
          provide: "MY_PROVIDER",
          useFactory: asyncProps.useFactory,
          inject: asyncProps.inject,
        };
    
     return {
        module: MyModule,
        providers: [myFactory, MyService],
        exports: [MyService],
        imports: [...asyncProps.imports],
        };
    }
}

@Injectable()
export class MyService {

   constructor(@Inject("MY_PROVIDER") this options:ProviderOptions){

   }
}

由于某种原因,我无法解析 MyService -

错误:Nest 无法解析 MyService (?) 的依赖项。请 确保索引 [0] 处的参数依赖项在 MyModule 上下文。

我在这里缺少什么?

谢谢!

更新 - 所以现在真的很奇怪- 最初 MyService 位于 MyModule 旁边的另一个文件中。当将 MyService 移动到与 MyModule 相同的文件时,上面的代码确实可以按预期工作。怎么可能?

【问题讨论】:

  • 您在消费模块中如何使用MyService
  • @JayMcDoniel 我正在通过构造函数注入它。但是,即使根本不使用它 - Nest 也无法加载,因为他无法解决 MyService 依赖项。
  • 但是这个的消费代码是什么样的呢?完整的错误是什么?这里还不足以知道出了什么问题
  • @JayMcDoniel 内联更新。现在,当将类移动到与模块相同的文件时,此代码也可以工作。你对此有什么解释吗?

标签: javascript node.js nestjs


【解决方案1】:

根据您的错误,您有一个循环文件​​导入,这意味着 typecript 无法解析类名,进而 Nest 无法创建该类。我just answered another question on it here

【讨论】:

  • 谢谢!它确实看起来像。 “MY_PROVIDER”是模块文件中的一个常量,因此服务文件引用了该文件。将令牌移动到 const 文件解决了这个问题。
猜你喜欢
  • 2016-02-18
  • 1970-01-01
  • 2021-07-30
  • 2021-04-23
  • 2019-04-04
  • 1970-01-01
  • 2014-03-03
  • 2020-07-18
  • 2014-01-19
相关资源
最近更新 更多