Понимание Inject, Injectable и InjectRepository в гнезде - PullRequest
0 голосов
/ 01 августа 2020

Я пришел из не машинописного и не гнездового фона. Я просматривал код и нашел этот фрагмент кода

import { Inject, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { AreaService } from '../area/-area.service';
import { Repository } from 'typeorm';
import { Office } from './office.entity';
import { OfficeInterface } from './office.interface';

@Injectable()
export class OfficeService {
  constructor(
    @Inject(AreaService)
    private readonly AreaService: AreaService,
    @InjectRepository(Office)
    private readonly OfficeRepository: Repository<Office>,
  ) {}

Теперь, честно говоря, меня это немного утомляет. Я зашел на Nest JS страницу , чтобы понять это и то, что они говорят

Для людей, пришедших из разных языков программирования, может быть неожиданным узнать это в Гнездо, почти все используется для входящих запросов. У нас есть пул подключений к базе данных, одноэлементные службы с глобальным состоянием и т. Д. c. Помните, что Node.js не соответствует многопоточной модели запроса / ответа без сохранения состояния, в которой каждый запрос обрабатывается отдельным потоком. Следовательно, использование одноэлементных экземпляров полностью безопасно для нашего приложения. мы делаем @Injectable() какой объем у него будет?

Кто-нибудь, пожалуйста, объясните мне разницу между @Injectable(), @Inject(AreaService) и @InjectRepository(Office) и когда, какой из них следует использовать?

1 Ответ

0 голосов
/ 01 августа 2020

Чтобы ответить на ваш вопрос относительно REQUEST -scope:

@Injectable({ scope: Scope.REQUEST })
export class CatsService {}

Это означает, что для каждого запроса, который обрабатывается Controller, который зависит от CatsService, создается новый экземпляр CatsService будет создан. Это также подразумевает, что любая другая служба / контроллер, зависящая от CatService, будет иметь область действия REQUEST, даже если они определены с областью действия по умолчанию (то есть одноэлементной). Это важно помнить, так как это может повлиять на ваше приложение, см. this и that для получения дополнительной информации.

...