Nest JS не может разрешить зависимости в сервисе - PullRequest
0 голосов
/ 05 февраля 2019

Я создал основной модуль, в котором есть служба.

import { Module } from '@nestjs/common';
import { CacheService } from './cache.service';


@Module({
  providers:[{ provide: CacheService, useValue: new CacheService()}],
  exports:[{ provide: CacheService, useValue: new CacheService()}]
})
export class CoreModule {}

Я импортировал CoreModule в AppModule.

@Module({
    imports: [
        TypeOrmModule.forRoot(typeOrmConfig),
        CoreModule,
        offerModule
    ],
    controllers: [AppController],
    providers: [AppService]
})
export class AppModule {}

Существуетмодуль предложения импортируется в AppModule.Когда я пытаюсь ввести CacheService в контрольном модуле, он выдает ошибку ниже.

2019-02-05 13:40:25 [error]:    Error: Nest can't resolve dependencies of the OfferService (OfferRepository, ?, Connection, AppLogger). Please make sure that the argument at index [1] is available in the OfferModule context.
    at Injector.lookupComponentInExports (C:\Project Workspace\ts-sharing\node_modules\@nestjs\core\injector\injector.js:144:19)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)
    at Function.Module.runMain (module.js:696:11)
    at Object.<anonymous> (C:\Project Workspace\ts-sharing\node_modules\ts-node\src\bin.ts:157:12)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
 1: v8::internal::compiler::Type::Negative31
 2: v8::internal::wasm::SignatureMap::Find
 3: v8::internal::Builtins::CallableFor
 4: v8::internal::Builtins::CallableFor
 5: v8::internal::Builtins::CallableFor
 6: 0000023CE08843C1

Может кто-нибудь, пожалуйста, помогите в этом.

1 Ответ

0 голосов
/ 05 февраля 2019

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


Если вы хотите, чтобы ваш CoreModule был доступен по всему миру, вы можете сделать его глобальным модулем с помощью декоратора @Global.При этом модуль должен быть импортирован только один раз (например, в AppModule) и затем будет доступен во всех модулях.

@Global()
@Module({
  providers:[CacheService],
  exports:[CacheService],
})
export class CoreModule {}
...