我是 Nestjs 的新手,如果我想注入另一个模块,我不明白何时需要导入整个模块或仅导入服务。
例如:我有我的loggingModule
import { Module } from "@nestjs/common";
import { LoggingService } from "./logging.service";
@Module({
providers: [LoggingService],
exports: [LoggingService],
})
export class LoggingModule {}
Run Code Online (Sandbox Code Playgroud)
用我的登录服务:
import { Injectable } from "@nestjs/common";
@Injectable()
export class LoggingService {
logToConsole(logString: string) {
console.log(logString)
}
}
Run Code Online (Sandbox Code Playgroud)
我想将其导入另一个模块,例如 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 {
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器内我可以执行以下操作:
@Controller('books')
export class BookController {
constructor(private booksService: BooksService, private loggingService: LoggingService) {}
Run Code Online (Sandbox Code Playgroud)
问题是:当我需要导入整个模块而不是提供程序中的单个服务(LogginService)时,例如:
@Module({
controllers: [BookController],
providers: [BooksService,LoggingService],
})
export class BooksModule {
Run Code Online (Sandbox Code Playgroud)
Jay*_*iel 20
99% 的情况下,导入模块。在 Nest 中,如果导入模块,您将获得已创建的类的相同实例。如果将 添加provider到providers数组中,您最终会得到一个新实例,这不是很多人通常想要的。只要模块导出提供程序,您就可以重新使用创建的实例,这意味着更少的内存使用,以及更少的类实例数量泄漏,这意味着更少的时间追踪为什么this.someClass.field不等于this.someClass.field
| 归档时间: |
|
| 查看次数: |
3701 次 |
| 最近记录: |