Dependency injection NestJs模块取决于提供程序、ServiceLocator?

Dependency injection NestJs模块取决于提供程序、ServiceLocator?,dependency-injection,nestjs,Dependency Injection,Nestjs,目标 我在一个类似于SpringActuator的模块中工作(我需要/health、/info、/metrics等),我需要在多个应用程序之间重用该模块,但确定应用程序是否健康或获取应用程序信息的逻辑是在应用程序本身定义的,我希望该执行器模块对应用程序不可知。因此,我需要应用程序导入传递已存在于应用程序上下文中的提供程序的模块 实施 我使用ModuleRef(带有strict选项)创建类似ServiceLocator的东西,以便在模块初始化期间解决任何应用程序依赖关系 执行器模块是这样进口的 i

目标

我在一个类似于SpringActuator的模块中工作(我需要/health、/info、/metrics等),我需要在多个应用程序之间重用该模块,但确定应用程序是否健康或获取应用程序信息的逻辑是在应用程序本身定义的,我希望该执行器模块对应用程序不可知。因此,我需要应用程序导入传递已存在于应用程序上下文中的提供程序的模块

实施

我使用ModuleRef(带有strict选项)创建类似ServiceLocator的东西,以便在模块初始化期间解决任何应用程序依赖关系

执行器模块是这样进口的

imports: [ActuatorModule.forRoot({ actuatorToken: ApplicationActuator })]
get actuator(): Actuator {
  return this.factoryHelper.instance;
}

constructor(@Inject('ActuatorFactoryHelper') private readonly factoryHelper: FactoryHelper<Actuator>) {}
ApplicationActuator是知道应用程序是否健康的类。此提供程序可能在内部具有另一个依赖项(嵌套)

ActuatorModule使用工厂方法提供服务定位器(FactoryHelper)

最后,我的服务使用FactoryHelper,如下所示

imports: [ActuatorModule.forRoot({ actuatorToken: ApplicationActuator })]
get actuator(): Actuator {
  return this.factoryHelper.instance;
}

constructor(@Inject('ActuatorFactoryHelper') private readonly factoryHelper: FactoryHelper<Actuator>) {}
获取执行器():执行器{
返回this.factoryHelper.instance;
}
构造函数(@Inject('ActuatorFactoryHelper')私有只读factoryHelper:factoryHelper){}
这就是FactoryHelper的外观

export class FactoryHelper<T> implements OnModuleInit {

   instance: T;

   constructor(
     private readonly moduleRef: ModuleRef,
     private readonly token: Type<any> | string | symbol,
   ) {}

   onModuleInit() {
     this.instance = this.moduleRef.get(this.token, { strict: false 
   });
  }
}
导出类FactoryHelper实现OnModuleInit{
实例:T;
建造师(
私有只读moduleRef:moduleRef,
专用只读令牌:类型|字符串|符号,
) {}
onModuleInit(){
this.instance=this.moduleRef.get(this.token,{strict:false
});
}
}
问题

我在另一篇文章中读到,使用依赖于提供者的模块是一种不好的做法,这是一种不好的做法吗?我能面对什么问题?这是一种更简单的方法吗

注释

  • 我尝试使用自定义提供程序(useFactory),但嵌套依赖项没有得到解决(它们对执行器模块不可见)
提前谢谢