首页
壁纸
统计
友链
Search
1
Nestjs概述-中文
10 阅读
2
ExpressAPI
10 阅读
3
NestJS新手入门核心模块对比表笔记
9 阅读
4
JavaScript企业数据处理实用指南
9 阅读
5
Vue2详细笔记
8 阅读
Nodejs
Vue
Java
Msql
登录
Search
Wasnl
累计撰写
12
篇文章
累计收到
1
条评论
首页
栏目
Nodejs
Vue
Java
Msql
页面
壁纸
统计
友链
搜索到
1
篇与
的结果
2026-02-24
NestJS 自定义 Provider
一、依赖注入(DI)基础依赖注入是控制反转(IoC) 技术,将依赖的实例化交给 Nest 运行时容器,而非手动代码创建。IOC 容器就是 Nest 负责 “接管依赖实例化” 的核心,依赖注入(DI)是 IOC 思想在 Nest 里的具体实现方式。工作三步流程标记可注入@Injectable() 装饰器 → 声明类可被 Nest IoC 容器管理。声明依赖控制器构造函数 constructor(private service: XxxService) → 声明依赖。注册提供者模块 @Module 的 providers 数组 → 绑定 Token 与实现类。容器行为实例化时自动解析依赖,递归处理依赖链(自底向上)。默认单例:创建 → 缓存 → 复用。二、标准 Provider(简写)providers: [CatsService]等价完整写法:providers: [ { provide: CatsService, useClass: CatsService, } ]provide:Token(注入令牌)useClass:实际实例化的类三、自定义 Provider 五种用法1. 值提供者:useValue注入常量、外部库、模拟对象。适合测试替换真实服务。{ provide: CatsService, useValue: mockCatsService }2. 非类 Token(字符串 / Symbol / 枚举)用字符串做令牌,配合 @Inject() 使用。{ provide: 'CONNECTION', useValue: connection }注入:constructor(@Inject('CONNECTION') connection: Connection) {}3. 类提供者:useClass动态切换实现类(如开发/生产环境)。{ provide: ConfigService, useClass: process.env.NODE_ENV === 'development' ? DevelopmentConfigService : ProductionConfigService }4. 工厂提供者:useFactory(最灵活)动态创建实例,可注入其他依赖。inject 数组 → 按顺序传入工厂函数参数。{ provide: 'CONNECTION', useFactory: (optionsProvider: MyOptionsProvider) => { return new DatabaseConnection(optionsProvider.get()); }, inject: [MyOptionsProvider] }支持可选依赖:inject: [{ token: 'OptionalProvider', optional: true }]5. 别名提供者:useExisting给已有 Provider 起别名,指向同一个单例。{ provide: 'AliasedLogger', useExisting: LoggerService }四、导出自定义 ProviderProvider 默认模块内可见,跨模块需导出:// 按 Token 导出 exports: ['CONNECTION'] // 或完整对象导出 exports: [connectionFactory]五、核心总结@Injectable() → 可被容器管理provide → 唯一 Token五大实现:useValue:常量/对象useClass:动态类useFactory:动态工厂(支持依赖)useExisting:别名类简写:providers: [Service]跨模块使用必须 exports
2026年02月24日
7 阅读
0 评论
1 点赞