Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务可以';由于另一个服务注入,无法找到依赖项_Javascript_Node.js_Typescript_Dependency Injection_Nestjs - Fatal编程技术网

Javascript 服务可以';由于另一个服务注入,无法找到依赖项

Javascript 服务可以';由于另一个服务注入,无法找到依赖项,javascript,node.js,typescript,dependency-injection,nestjs,Javascript,Node.js,Typescript,Dependency Injection,Nestjs,我有一个NestJs应用程序,在我对另外两个服务(PmsConnectionService->UserService)使用依赖项注入后,以前工作的服务会抛出一个错误(ReviewService找不到DoctorLoaderService)。所有这些都来自不同的模块 我的nestjs版本是5.1.0。 PmsConnectionService是我新创建的模块的一部分。我必须使用forwardRef连接到持有DoctorLoaderService的模块。 请注意,在下面的代码中,PmsConnect

我有一个NestJs应用程序,在我对另外两个服务(PmsConnectionService->UserService)使用依赖项注入后,以前工作的服务会抛出一个错误(ReviewService找不到DoctorLoaderService)。所有这些都来自不同的模块

我的nestjs版本是5.1.0。 PmsConnectionService是我新创建的模块的一部分。我必须使用forwardRef连接到持有DoctorLoaderService的模块。 请注意,在下面的代码中,PmsConnectionService注入了DoctorClinicService,这就是注入DoctorLoaderService。当我在PmsConnectionService中注释掉DoctorClinicService时,错误消失了。然而,我仍然不知道为什么会发生这个错误

服务

@Injectable()
export class PmsConnectionService {
    constructor(
        private clinicService: DoctorClinicService,
    ) {}
模块:

@Module({
    imports: [
        forwardRef(() => DoctorModule),
        TypeOrmModule.forFeature([
            ...
          ]),
    ],
    providers: [
        PmsConnectionService,
    ],
    exports: [
        PmsConnectionService,
    ],
})
export class PmsModule {}
启动时,应用程序抛出以下错误:

[Nest] 17921   - 9/26/2019, 9:44:15 PM   [NestFactory] Starting Nest application...
[Nest] 17921   - 9/26/2019, 9:44:15 PM   [ExceptionHandler] Nest can't resolve dependencies of the ReviewService (?, ReviewManagerService, NotiIssuerService). Please make sure that the argument at index [0] is available in the current context. +90ms
Error: Nest can't resolve dependencies of the ReviewService (?, ReviewManagerService, NotiIssuerService). Please make sure that the argument at index [0] is available in the current context.
    at Injector.resolveSingleParam (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:115:19)
    at Promise.all.dependencies.map (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:85:49)
    at Array.map (<anonymous>)
    at Injector.resolveConstructorParams (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:83:58)
    at Injector.loadInstance (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:63:20)
    at Injector.loadInstanceOfComponent (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:40:20)
    at Promise.all.map (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance-loader.js:39:102)
    at Array.map (<anonymous>)
    at InstanceLoader.createInstancesOfComponents (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance-loader.js:39:59)
    at Promise.all.map (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance-loader.js:26:24)
[Nest]17921-2019年9月26日,晚上9:44:15[NestFactory]开始应用Nest。。。
[Nest]17921-2019年9月26日,晚上9:44:15[ExceptionHandler]Nest无法解析ReviewService(?,ReviewManagerService,NotiIssuerService)的依赖项。请确保索引[0]处的参数在当前上下文中可用+90毫秒
错误:嵌套无法解析ReviewService(?,ReviewManagerService,NotiIsUserService)的依赖项。请确保索引[0]处的参数在当前上下文中可用。
在Injector.resolvesSingleParam(/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/Injector/Injector.js:115:19)
在Promise.all.dependencies.map(/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:85:49)
在Array.map()处
在Injector.resolveConstructorParams(/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/Injector/Injector.js:83:58)
在Injector.loadInstance(/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/Injector/Injector.js:63:20)
在Injector.loadInstanceOfComponent(/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/Injector/Injector.js:40:20)
在Promise.all.map(/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance loader.js:39:102)
在Array.map()处
在InstanceLoader.createInstancesOfComponents(/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance loader.js:39:59)
在Promise.all.map(/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance loader.js:26:24)

我不知道如何解决这个问题,尽管我认为问题在于PmsConnectionService和DoctorClinicService之间的连接。

看起来您只设置了一半的forward ref。由于您的
ReviewService
(预订模块的一部分)依赖于您的
DoctorLoaderService
(DoctorModule的一部分),而您的
DoctorLoaderService
依赖于您的
ReviewService
,因此您需要在每个受影响类别的模块和服务中都
forwardRef
。在这种情况下,
DocotrModule
需要一个
forwardRef(()=>BookingModule)
BookingModule
需要一个
forwardRef(()=>DoctorModule)
以及
ReviewService
DoctorLoadingService
具有类似的
@Inject(forwardRef(()=>)
设置


一般来说,最好避免这些循环依赖关系,因为它们会造成难以调试的头痛问题。也许可以看看您是否可以在体系结构中进行更改,以使代码更简单/减少对其他部分的依赖。

非常感谢,这真的很有帮助。但是,我还是有点困惑,因为我确实收到了一些建议“无法通过添加更多关系来解析依赖项”。由于缺少@Inject(forwardRef()=>),我希望得到循环依赖项错误调用。我猜@Injectdecorator通过直接指向缺少的依赖项解决了这个问题,但我仍然不明白它为什么会丢失。这可能与forwardRef函数有关,但我不确定如何。
@Injectable()
export class ReviewService {
  constructor(
    private readonly doctorLoader: DoctorLoaderService,
    private readonly reviewManager: ReviewManagerService,
  ) { }
@Module({
    imports: [
        forwardRef(() => DoctorModule),
        TypeOrmModule.forFeature([
            ...
          ]),
    ],
    providers: [
        PmsConnectionService,
    ],
    exports: [
        PmsConnectionService,
    ],
})
export class PmsModule {}
@Module({
  imports: [
    PmsModule,
    TypeOrmModule.forFeature([
      User,
      ...
    ]),
  ],
  controllers: [
    UserController,
  ],
  providers: [
    UserService,
  ],
  exports: [UserService],
})
export class UserModule {
  public configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(ActivityMiddleware)
      .exclude({
        path: '*',
        method: RequestMethod.OPTIONS,
      })
      .forRoutes({ path: '*', method: RequestMethod.ALL });
  }
}
@Module({
  imports: [
    UserModule,
    TypeOrmModule.forFeature([
      User,
      DoctorProfile,
      DoctorClinic,
      ...
    ]),
    forwardRef(() => BookingModule),
  ],
  controllers: [
    DoctorProfileController,
  ],
  providers: [
    DoctorLoaderService,
    DoctorClinicService,
  ],
  exports: [
    DoctorClinicService,
    DoctorLoaderService,
  ],
})
export class DoctorModule { }
Module({
  imports: [
    PmsModule,
    UserModule,
    DoctorModule,
    TypeOrmModule.forFeature([
      ...
    ]),
  ],
  controllers: [
   ...
  ],
  providers: [
    ReviewService,
  ],
  exports: [
    ReviewService,
  ],
})
export class BookingModule { }
[Nest] 17921   - 9/26/2019, 9:44:15 PM   [NestFactory] Starting Nest application...
[Nest] 17921   - 9/26/2019, 9:44:15 PM   [ExceptionHandler] Nest can't resolve dependencies of the ReviewService (?, ReviewManagerService, NotiIssuerService). Please make sure that the argument at index [0] is available in the current context. +90ms
Error: Nest can't resolve dependencies of the ReviewService (?, ReviewManagerService, NotiIssuerService). Please make sure that the argument at index [0] is available in the current context.
    at Injector.resolveSingleParam (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:115:19)
    at Promise.all.dependencies.map (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:85:49)
    at Array.map (<anonymous>)
    at Injector.resolveConstructorParams (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:83:58)
    at Injector.loadInstance (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:63:20)
    at Injector.loadInstanceOfComponent (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/injector.js:40:20)
    at Promise.all.map (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance-loader.js:39:102)
    at Array.map (<anonymous>)
    at InstanceLoader.createInstancesOfComponents (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance-loader.js:39:59)
    at Promise.all.map (/Users/dude/Documents/lekar/unexpected_koala_backend/node_modules/@nestjs/core/injector/instance-loader.js:26:24)