Рубрики
Без рубрики

Глубокое погружение в масштаб впрыска Nestjs

В моей предыдущей части мы обсуждали услуги Nestjs. В этом куске мы посмотрим на масштаб впрыска …. Tagged с JavaScript, Tymdercript, WebDev, Node.

В моей предыдущей части мы обсуждали услуги Nestjs. В этом куске мы посмотрим на масштаб впрыска.

Существует три режима для определения объема. Мы можем либо определить свойства охвата на уровне обслуживания или уровне модуля. Он может быть использован с классовой и неклассной службой и с контроллерами. Три режима:

  • ПО УМОЛЧАНИЮ
  • ЗАПРОС
  • Преходящий

Синтаксис для определения объема имеет как показано ниже:

Для обслуживания

@Injectable({
    scope: Scope.TRANSIENT
})

Для модуля

providers : [{
    provide : PRODUCT,
    useValue: Product_Token,
    scope : Scope.REQUEST
}]

Для контроллеров

@Controller({ path: 'product', scope: Scope.REQUEST })

Теперь, когда мы знаем о том, как использовать свойство прицела, давайте посмотрим каждый из них подробно.

Объем по умолчанию

Вам не нужно определять объем на По умолчанию Отказ Когда вы не определяете свойство, он установлен на ПО УМОЛЧАНИЮ И экземпляры будут Singleton (что означает, как только соединение будет установлено, тот же экземпляр будет использоваться для всех запросов).

Для большинства случаев, таких как подключение к базе данных и услуги регистратора, Singleton – лучший вариант для использования.

В приведенном ниже примере показаны Loggerservice В Singleton любой контроллер/услуга с использованием Loggerservice получит тот же экземпляр.

Спект запроса

В оформлении Запрос Область применения, тот же экземпляр будет разделен на тот же запрос.

Вы можете увидеть на диаграмме ниже, что Loggerservice делятся за каждый запрос. GetProduct Действие и Productsivice поделится тем же экземпляром, и если мы попытаемся получить доступ к AddProduct . Действие, другой экземпляр будет создан.

Дело для использования в реальном времени, если мы хотим поделиться Запрос Объект между контроллером и обслуживанием для каждого запроса.

Переходные масштабы

В оформлении Переходный Область применения, новый экземпляр будет создан для каждого контроллера или услуги, где мы его используем. Приведенная ниже диаграмма показывает тот же сценарий, где объем изменяется на Преходящий . Вот новый экземпляр Loggerservice создается для каждого действия и обслуживания.

Код

Создать новый Loggerservice Использование команды ниже:

nest generate service Logger
import { Injectable, Scope } from '@nestjs/common';

@Injectable({
    scope: Scope.REQUEST
})
export class LoggerService {
    constructor() {
        console.log('new instance of request')
    }
}

Далее введите услугу в ProductController и Productsivice Отказ

import { LoggerService } from '../logger/logger.service';

@Controller('product')
export class ProductController {

    constructor(private productService: ProductService,
        private loggerService: LoggerService) { }
}
import { LoggerService } from '../logger/logger.service';

@Injectable()
export class ProductService {

    constructor(@Inject(PRODUCT) product: Product,
        private loggerService: LoggerService) {
    }
}

Далее запустите приложение. Измените объем и посмотрите, как изменяется объем в действии.

Заключение

Хотя это нормально, чтобы иметь экземпляр Singleton, используя Запрос и Переходный Сцепы могут повлиять на Производительность согласно документам. Но могут быть сценарии, где нам нужно изменить объем – но пока не уверен, просто используйте объем по умолчанию.

Но могут быть сценарии, где нам нужно изменить объем – но пока не уверен, просто используйте По умолчанию объем.

Оригинал: “https://dev.to/this-is-learning/a-deep-dive-into-the-nestjs-injection-scope-39ih”