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
相关产品推荐
相关产品推荐

