我该如何解决Nestjs中的这种依赖性错误

时间:2019-08-06 15:50:35

标签: nestjs

我找不到问题所在。我收到以下错误:

  

嵌套不能解析BService(?,AService)的依赖项。请   确保索引[0]处的参数在CModule中可用   上下文。

我有3个模块,A,B,C。

C应该能够使用B的服务,而B应该调用A的服务。

A和B具有TypeOrm导入,每个都有一个实体。

代码如下:

app.modules.ts:

@Module({
  imports: [
    TypeOrmModule.forRoot(),
    CModule
  ]
})
export class AppModule {}

c.module.ts:

@Module({
  imports: [BModule],
  controllers: [CController],
  providers: [BService]
})
export class CModule {}

b.module.ts:

@Module({
  imports: [
    AModule,
    TypeOrmModule.forFeature([B], 'default')
  ],
  providers: [BService],
  exports: [AModule, BService]
})

b.entity.ts:

@Entity()
export class B {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

}

b.service.ts:

@Injectable()
export class BService {
  constructor(
    @InjectRepository(B, 'default')
    private readonly bRepository: Repository<B>,
    private readonly aService: AService
  ) {}
}

a.module.ts:

@Module({
  imports: [
    TypeOrmModule.forFeature([A], 'default')
  ],
  providers: [AService],
  exports: [AService]
})
export class AModule {}

a.entity.ts:

@Entity()
export class A {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;
}

a.service.ts:

@Injectable()
export class AService {
  constructor(
    @InjectRepository(A, 'default')
    private readonly aRepository: Repository<A>) {
  }
}

1 个答案:

答案 0 :(得分:1)

在您的CModule中,您无需定义providers: [BModule],因为您将覆盖BModule中给出的值。由于BModule已经导出了BService,因此除了将BModule导入到CModule中之外,您不需要做任何其他事情,那么您可以毫无问题地使用BService

旁注:您是否有任何理由在模块之间具有依赖性?在大多数情况下,如果可以避免导入其他模块(如果不必要),则可以使很多代码更易于使用。