我是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
的原因