РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpCpUE 5 of 201 menu
◀ ▶

Псевдоним провайдера в Nest

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

Приём useExisting не строит новый экземпляр, а указывает на провайдер, уже записанный в модуле. Поле provide задаёт псевдоним, useExisting - исходный токен. Внедрение по строке и по классу тогда даёт один и тот же объект.

Покажем на примере постов. Опишем сервис списка:

import { Injectable } from '@nestjs/common'; @Injectable() export class PostService { getPosts(): string { return 'All posts'; } }

Зарегистрируем сервис и строковый псевдоним в модуле:

import { Module } from '@nestjs/common'; import { PostController } from './post.controller.js'; import { PostService } from './post.service.js'; @Module({ controllers: [PostController], providers: [ { provide: PostService, useClass: PostService, }, { provide: 'LIST', useExisting: PostService, }, ], }) export class AppModule {}

Контроллер возьмёт сервис по псевдониму и по типу - это один объект:

import { Controller, Get, Inject } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller('posts') export class PostController { list: PostService; postService: PostService; constructor( @Inject('LIST') list: PostService, postService: PostService, ) { this.list = list; this.postService = postService; } @Get() getPosts(): string { return this.list.getPosts(); } }

Свяжите строковый псевдоним с WorkerService и верните список из WorkerController по этому имени.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить