配置项模块

全局模块#
如果你必须在所有地方导入相同的模块集,它会变得乏味。与 Nest 不同,Angularproviders 是在全局作用域内注册的。一旦定义,它们随处可用。然而,Nest 将提供程序封装在模块作用域内。如果不首先导入封装模块,则无法在其他地方使用模块的提供程序。exports别忘记

当你想要提供一组开箱即用的提供程序(例如辅助程序、数据库连接等)时,请使用 @Global() 装饰器使模块全局化

点击查看代码
import { Module, Global } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Global()
@Module({
  controllers: [CatsController],
  providers: [CatsService],
  exports: [CatsService],
})
export class CatsModule {}

模块

可选提供器#
有时,你可能有不一定要解决的依赖。例如,你的类可能依赖于配置对象,但如果没有传递任何内容,则应使用默认值。在这种情况下,依赖变为可选,因为缺少配置提供程序不会导致错误。

要指示提供器是可选的,请在构造函数的签名中使用 @Optional() 装饰器。

点击查看代码
import { Injectable, Optional, Inject } from '@nestjs/common';

@Injectable()
export class HttpService<T> {
  constructor(@Optional() @Inject('HTTP_OPTIONS') private httpClient: T) {}
}

Nest 模块系统包含一个称为动态模块的强大功能。此功能使你能够轻松创建可自定义的模块,这些模块可以动态注册和配置提供程序。此处 广泛介绍了动态模块。在本章中,我们将给出一个简短的概述来完成对模块的介绍

点击查看代码
import { Module, DynamicModule } from '@nestjs/common';
import { createDatabaseProviders } from './database.providers';
import { Connection } from './connection.provider';

@Module({
  providers: [Connection],
  exports: [Connection],
})
export class DatabaseModule {
  static forRoot(entities = [], options?): DynamicModule {
    const providers = createDatabaseProviders(options, entities);
    return {
      module: DatabaseModule,
      providers: providers,
      exports: providers,
    };
  }
}
forRoot() 方法可以同步或异步(即通过 Promise)返回动态模块。

模块的使用和配置全局以及导出和引入
服务装饰器默认值配置
动态模块搭配(自定义配置)传递服务提供注入参数传递

posted @   jialiangzai  阅读(4)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示