从另一个模块注入 nestjs 服务

我有一个和一个.PlayersModuleItemsModule

我想在 .ItemsServicePlayersService

当我通过注射添加它时:

import { Injectable } from '@nestjs/common';
import { InjectModel } from 'nestjs-typegoose';
import { ModelType, Ref } from 'typegoose';
import { Player } from './player.model';
import { Item } from '../items/item.model';
import { ItemsService } from '../items/items.service';

@Injectable()
export class PlayersService {
    constructor(
        @InjectModel(Player) private readonly playerModel: ModelType<Player>,
        private readonly itemsService: ItemsService){}

我得到这个嵌套错误:

[Nest] 11592 - 2018-8-13 11:42:17 [ExceptionHandler] Nest 无法解析 PlayersService 的依赖关系 (+, ?).请确保索引 [1] 处的参数在当前上下文中可用。

这两个模块都导入到 .这两个服务在其模块中单独工作。app.module.ts


答案 1

您必须在提供它的模块中导出ItemsService

@Module({
  controllers: [ItemsController],
  providers: [ItemsService],
  exports: [ItemsService]
  ^^^^^^^^^^^^^^^^^^^^^^^
})
export class ItemsModule {}

,然后在使用该服务的模块中导入导出模块:

@Module({
  controllers: [PlayersController],
  providers: [PlayersService],
  imports: [ItemsModule]
  ^^^^^^^^^^^^^^^^^^^^^^
})
export class PlayersModule {}

⚠️ 不要将同一提供程序添加到多个模块。导出提供程序,导入模块。⚠️


答案 2

假设你想在我的任务模块的控制器中使用来自AuthModule的AuthService。

为此,您需要从AuthModule导出authService。

@Module({
    imports: [
     ....
    ],
    providers: [AuthService],
    controllers: [AuthController],
    exports:[AuthService]
  })
export class AuthModule {}
  

然后在 TaskModule 中,您需要导入 AuthModule(注意:导入 AuthModule 而不是 TaskModule 中的 AuthService)

@Module({
    imports:[
      AuthModule
    ],
    controllers: [TasksController],
    providers: [TasksService]
  })
export class TasksModule {}

现在,您应该能够在任务控制器中使用 DI

@Controller('tasks')
export class TasksController {
   constructor(private authService: AuthService) {}
   ...
}