Inject nestjs service from another module

I’ve got a PlayersModule and an ItemsModule.

I want to use the ItemsService in the PlayersService.

When I add it by injection:

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){}

I get this nest error :

[Nest] 11592 – 2018-8-13 11:42:17 [ExceptionHandler] Nest can’t
resolve dependencies of the PlayersService (+, ?). Please make sure
that the argument at index [1] is available in the current context.

Both modules are imported in the app.module.ts. Both services are working alone in their module.

4 thoughts on “Inject nestjs service from another module”

  1. I believe that you faced the same problem i had. My scenario was 2 sibling custom modules (user, auth) that needed to use each other’s services. I used circular DI to solve it. please check this link

    Let me know whether if it solved your issue, maybe I can advise you further.

    Reply
  2. You have to export the ItemsService in the module that provides it:

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

    and then import the exporting module in the module that uses the service:

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

    ⚠️ Do not add the same provider to multiple modules. Export the provider, import the module. ⚠️

    Reply
  3. Solved my problem by changing the way of importing the constant string (TOKEN) used in @Inject()) of my provider… be careful using index.ts whith export * from module.ts, nest won’t resolve the dependecy

    Reply

Leave a Comment