You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS依赖注入优化:无需添加DayService依赖服务至Providers?

解决方案

当然有办法不用手动把DayService的所有依赖都加到EntityModule的providers列表里,下面是几种常用的实现方式:

1. 用providedIn: 'root'声明全局单例服务

给DayService和它的依赖(比如OtherService)都加上providedIn: 'root'配置,这样这些服务会被Angular自动注册为全局单例,不需要在任何模块的providers里手动声明,直接在需要的地方注入即可:

// OtherService
@Injectable({
  providedIn: 'root'
})
export class OtherService {
  // 服务逻辑
}

// DayService
@Injectable({
  providedIn: 'root'
})
export class DayService {
  constructor(private otherService: OtherService) {}
  // 服务逻辑
}

// EntityService
@Injectable({
  providedIn: EntityModule // 或者root,根据你的需求选择
})
export class EntityService {
  constructor(private dayService: DayService) {}
  // 服务逻辑
}

这种方式下,EntityModule的providers里只需要放EntityService(如果它不是全局服务),完全不用管DayService和它的依赖。

2. 将DayService及其依赖封装到独立模块

创建一个专门的模块(比如DayModule),把DayService和它的所有依赖都声明在这个模块的providers里,然后导出DayService。之后在EntityModule里导入这个DayModule即可:

// DayModule
@NgModule({
  providers: [DayService, OtherService]
})
export class DayModule {}

// EntityModule
@NgModule({
  imports: [DayModule],
  providers: [EntityService]
})
export class EntityModule {}

这样DayService的依赖被封装在自己的模块里,EntityModule只需要导入DayModule,不用关心内部的依赖细节。

3. 给DayService指定模块级别的providedIn

如果DayService只在EntityModule及其子模块中使用,可以直接在DayService的providedIn里指定EntityModule,同时确保它的依赖也配置了对应的providedIn(比如EntityModule或者root):

// OtherService
@Injectable({
  providedIn: EntityModule
})
export class OtherService {}

// DayService
@Injectable({
  providedIn: EntityModule
})
export class DayService {
  constructor(private otherService: OtherService) {}
}

这种情况下,Angular会自动把DayService和它的依赖注册到EntityModule的注入器中,你不需要手动把它们加到providers列表里。


内容的提问来源于stack exchange,提问作者Fedejs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:06:08