Использование нескольких модулей в Nestjs

#nestjs

Вопрос:

У меня в приложении появился новый модуль. Вот этот новый файл модуля economic.module.ts

 import { Module } from "@nestjs/common"; import { OrderModule } from "src/Api/V1/order/order.module"; import { OrderService } from "src/Api/V1/order/order.service"; import { EconomicService } from "./economic.service";  @Module({  imports:[OrderModule],  providers: [  EconomicService,  OrderService  ],  exports: [  EconomicService  ] }) export class EconomicModule {}  

Затем в его обслуживании мне требуется служба заказов, которую я импортировал выше.

Затем у меня есть HttprequestService, где я использую эту экономическую услугу и импортирую ее следующим образом

 .. // skipped   constructor(  private httpService: HttpService,  private economicService: EconomicService  ){} ..  

Мой модуль HttpRequest выглядит следующим образом

 @Module({  imports: [  HttpModule,  EconomicModule  ],  providers: [  HttpRequestService,  EconomicService  ],  exports: [  HttpRequestService  ] }) export class HttpRequestModule {}   

Теперь ошибка, которую я получаю, выглядит примерно так

Nest не может разрешить зависимости службы заказов (?, OrderStatusRepository, ..)

Но до введения этих изменений все работало нормально. Я уверен, что в инъекции есть проблема, но я ее не вижу.

Любая помощь будет признательна.

Комментарии:

1. конструктор шоу OrderService

Ответ №1:

Если вы экспортируете услуги из модуля, вам не нужно использовать службу модуля в качестве поставщика в модуле, в который вы импортируете модуль.

Проясните это на примере:

Если у вас есть модуль под названием user и если вы экспортируете user.service из него. Теперь, когда вам требуется user.service какой-либо другой модуль, вы просто импортируете пользовательский модуль и вам не нужно предоставлять его услугу в providers массиве.

Так что в Вашем случае

  import { Module } from "@nestjs/common"; import { OrderModule } from "src/Api/V1/order/order.module"; import { OrderService } from "src/Api/V1/order/order.service"; import { EconomicService } from "./economic.service";  @Module({  imports:[OrderModule],  providers: [  EconomicService,  ],  exports: [  EconomicService  ] }) export class EconomicModule {}   

Это должно сработать. Я только что удалил OrderService из providers[] . Поскольку вы импортируете модуль заказа, который сам должен экспортировать службу заказов, если нет, вам нужно включить его providers[] .

Надеюсь, это решит проблему.

Ответ №2:

Если у вас есть поставщик как часть модуля exports , и этот модуль находится в другом модуле imports , то в этом другом модуле вам не следует снова добавлять поставщика в providers массив. Это подскажет Nest создать новый экземпляр вместо повторного использования существующего экземпляра из исходного модуля.