Закрытый провайдер в Nest
Пусть сервису списка нужен вспомогательный класс. Название готовит он, и эта деталь принадлежит только своей теме.
Провайдер по умолчанию закрыт.
Его получают классы того же модуля:
контроллер и сервисы из списка
providers. В exports
его не ставят. Модуль, который
импортирует этот, закрытый класс
не увидит и внедрить его не сможет.
Покажем на примере постов. Вспомогательный сервис хранит название:
import { Injectable } from '@nestjs/common';
@Injectable()
export class TextService {
getTitle(): string {
return 'Morning note';
}
}
Сервис списка берёт название у вспомогательного сервиса:
import { Injectable } from '@nestjs/common';
import { TextService } from './text.service.js';
@Injectable()
export class PostService {
constructor(private textService: TextService) {}
getPosts(): string {
return this.textService.getTitle();
}
}
Контроллер отдаёт результат сервиса списка:
import { Controller, Get } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller('posts')
export class PostController {
constructor(private postService: PostService) {}
@Get()
getPosts(): string {
return this.postService.getPosts();
}
}
Оба сервиса остаются в модуле постов. Вспомогательный класс в экспорт не входит:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
import { PostService } from './post.service.js';
import { TextService } from './text.service.js';
@Module({
controllers: [PostController],
providers: [PostService, TextService],
})
export class PostsModule {}
Корневой модуль подключает модуль постов:
import { Module } from '@nestjs/common';
import { PostsModule } from './posts/posts.module.js';
@Module({
imports: [PostsModule],
})
export class AppModule {}
В модуле WorkersModule
сделайте вспомогательный сервис
для WorkerService и оставьте
его закрытым внутри модуля.
Модуль работников подключите
к корневому.