В NestJS, мощной и популярной среде для создания масштабируемых приложений Node.js, модули играют решающую роль в организации и структурировании кода. Одним из распространенных требований в приложениях NestJS является внедрение сервисов из одного модуля в другой. В этой статье мы рассмотрим различные методы внедрения межмодульных зависимостей, используя разговорный язык, и предоставим примеры кода для каждого подхода.
Метод 1: использование массива поставщиков
Самый простой способ внедрить сервис NestJS из одного модуля в другой — использовать массив providers. В массив importsцелевого модуля мы можем просто добавить модуль, содержащий нужный сервис. Вот пример:
// Source Module
import { Module } from '@nestjs/common';
import { SourceService } from './source.service';
@Module({
providers: [SourceService],
exports: [SourceService],
})
export class SourceModule {}
// Target Module
import { Module } from '@nestjs/common';
import { SourceModule } from '../source/source.module';
import { TargetService } from './target.service';
@Module({
imports: [SourceModule],
providers: [TargetService],
})
export class TargetModule {}
Метод 2: использование глобального модуля
Если у вас есть сервис, который необходимо использовать в нескольких модулях, вы можете использовать концепцию глобального модуля. Глобальный модуль — это модуль, который можно импортировать в любой другой модуль без явного указания его в массиве imports. Вот пример:
// Global Module
import { Module } from '@nestjs/common';
import { SharedService } from './shared.service';
@Module({
providers: [SharedService],
exports: [SharedService],
})
export class GlobalModule {}
// Source Module
import { Module } from '@nestjs/common';
import { GlobalModule } from '../global/global.module';
import { SourceService } from './source.service';
@Module({
imports: [GlobalModule],
providers: [SourceService],
})
export class SourceModule {}
// Target Module
import { Module } from '@nestjs/common';
import { GlobalModule } from '../global/global.module';
import { TargetService } from './target.service';
@Module({
imports: [GlobalModule],
providers: [TargetService],
})
export class TargetModule {}
Метод 3: использование динамических модулей
В некоторых случаях может потребоваться большая гибкость при внедрении сервисов между модулями. NestJS предоставляет динамические модули, которые позволяют настраивать зависимости модулей во время выполнения. Вот пример:
// Source Module
import { Module } from '@nestjs/common';
import { SourceService } from './source.service';
@Module({
providers: [SourceService],
exports: [SourceService],
})
export class SourceModule {}
// Target Module
import { Module } from '@nestjs/common';
import { DynamicModule } from '@nestjs/common/interfaces/modules/dynamic-module.interface';
import { SourceModule } from '../source/source.module';
import { TargetService } from './target.service';
@Module({})
export class TargetModule {
static register(sourceModule: DynamicModule): DynamicModule {
return {
module: TargetModule,
imports: [sourceModule],
providers: [TargetService],
exports: [TargetService],
};
}
}
В этой статье мы рассмотрели несколько методов внедрения сервисов NestJS из одного модуля в другой. Мы рассмотрели использование массива providers, глобальных и динамических модулей. Используя эти методы, вы можете добиться эффективного внедрения межмодульных зависимостей в приложениях NestJS.