其他服务中的@Inject服务-Nest无法解析依赖关系

时间:2019-09-28 23:13:07

标签: node.js dependency-injection dao nestjs

我正在尝试将两个服务注入到NestJS服务中并得到

  

嵌套无法解析MainServiceImpl(?,   Symbol(MainDao))。请确保索引为[0]的参数为   在MainModule上下文中可用

这是服务:

@Injectable()
export class MainServiceImpl implements MainService {

    constructor(
        @Inject(TYPES.PublishSubscriptionService) private publishSubscriptionService: PublishSubscriptionService,
        @Inject(TYPES.MainDao) private mainDao: MainDao
    ) {}

现在,如果我切换顺序,它总是第二个注入的服务会出现错误。

TYPES是Symbols

的对象
const TYPES = {
    PublishSubscriptionService: Symbol('PublishSubscriptionService'),
    MainDao: Symbol('MainDao'),
};
export default TYPES;

这是使用桶装的index.ts

// start:ng42.barrel
export * from './main.dao.mongo-impl';
export * from './main.dao';
export * from './main';
export * from './main.schema';
export * from './main.service.impl';
export * from './main.service';
// end:ng42.barrel

我想念什么?

Closed NestJS issue with no resolution
NestJS doc on @Global modules

2 个答案:

答案 0 :(得分:2)

我不能肯定地说没有看到您的MainServieImplModule或包含此服务的任何模块,但是如果我不得不猜测,您并没有将providers声明为正确地嵌套这两项服务。您需要像这样创建自定义提供程序

@Module({
  provides: [
    {
      provide: TYPES.PublishSubscriptionService,
      useClass: PublishSubscriptionService,
    },
    {
      provide: TYPES.MainDao,
      useClass: MainDao
    },
    MainServiceImpl
  ]
})
export class MainServiceImplModule {}

但是,如果这些提供程序是另一个模块的一部分,则需要确保这些提供程序是自定义的(如上所述),但也要导出,以便可以将其导入并在其他模块中使用。没有看到更多代码,这个问题就不可能回答,但是我认为这应该为您提供所需的指导。如果没有,请编辑您的问题并添加更多信息。

答案 1 :(得分:1)

我不知道是什么类型,您可以使用@Inject(PublishSubscriptionService),也可以简单地使用:

constructor(
        private publishSubscriptionService: PublishSubscriptionService,
        private mainDao: MainDao
) {}