Как работает разрешение служб в NestJS? - PullRequest
0 голосов
/ 18 октября 2019

Я новичок в NestJS и часто борюсь с его распознавателем служб, поэтому я хотел бы понять, как он разрешает службы, в надежде, что весь опыт использования NestJS перестанет быть разочаровывающим.

Этот вопрос связаниз странной (для меня) проблемы, с которой я столкнулся при разрешении конкретного провайдера. Представьте, что у меня есть очень простой модуль:

- src
  - game
    - game.module.ts
    - game.repository.ts

Тогда мой модуль выглядит так:

@Module({
  imports: [TypeOrmModule.forFeature([Game])],
  providers: [GameRepository],
})
export class GameModule {
}

А мой класс GameRepositorygame.repository.ts) выглядит так:

@Injectable()
export class GameRepository {
  public constructor(
    @InjectRepository(Game)
    private readonly gameRepository: Repository<Game>,
  ) {}
}

Это, отказывается компилировать. Я получу следующую ошибку: [ExceptionHandler] Nest can't resolve dependencies of the GameRepository (?). Please make sure that the argument at index [0] is available in the GameModule context. +64ms.

В тот момент я подумал, что, возможно, он использует имя файла, чтобы определить, как должен создаваться экземпляр класса, поэтому я переименовал класс в GameService и файл вgame.service.ts и о чудо, теперь NestJS была счастлива, что могла успешно скомпилировать!

За исключением ... почему? Из сообщения об ошибке это не должно быть проблемой, к тому же я не уверен, что для NestJS имеет смысл использовать имя файла или класса для принятия какого-либо решения.

Мое понимание (которое явнона данном этапе это неверно) то, что аннотация @Injectable определяет, какие классы будет создан экземпляром сервисного контейнера, а затем создается экземпляр того, что находится в массиве providers модуля, и вводятся его зависимости. Но из вышеприведенного сценария это, кажется, не вся история.


Итак, все это говорит о том, что в документе нет раздела, в котором подробно описывается логика его IoC, и я бы хотелчтобы понять это.

...