Nestjs导入服务或整个模块



我是Nestjs的新手,如果我想在另一个模块中注入,我不知道什么时候需要导入整个模块,或者只导入服务。

例如:我有我的日志模块

import { Module } from "@nestjs/common";
import { LoggingService } from "./logging.service";
@Module({
providers: [LoggingService],
exports: [LoggingService],
})
export class LoggingModule {}

使用我的logginService:

import { Injectable } from "@nestjs/common";
@Injectable()
export class LoggingService {
logToConsole(logString: string) {
console.log(logString)
}
}

我想把它导入另一个模块,比如BookModule

import { Module } from "@nestjs/common";
import { LoggingModule } from "src/logging/logging.module";
import { BookController } from "./book.controller";
import { BooksService } from "./books.service";

@Module({
controllers: [BookController],
providers: [BooksService],
imports: [LoggingModule]
})
export class BooksModule {
}

在我的控制器里我可以做:

@Controller('books')
export class BookController {
constructor(private booksService: BooksService, private loggingService: LoggingService) {}

问题是:当我需要导入整个模块而不是提供者中的单个服务(LogginService(时,比如:

@Module({
controllers: [BookController],
providers: [BooksService,LoggingService],
})
export class BooksModule {

99%的时间,导入模块。在Nest中,如果导入模块,则会得到已创建类的相同实例。如果将provider添加到providers数组中,则最终会得到一个新实例,这不是许多人通常想要的。只要模块导出提供者,您就可以重用创建的实例,这意味着更少的内存使用,更少的类实例数量泄漏,这意味着您可以更少地跟踪this.someClass.field不等于this.someClass.field的原因

最新更新