#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 создать новый экземпляр вместо повторного использования существующего экземпляра из исходного модуля.