我有一个关于动态模块导入的问题。假设我有@Injectable
服务,它取决于来自配置的参数:
@Injectable()
export class StatsService {
constructor(@Inject(SERVICE_NAME) private serviceName: string) {}
...
}
假设我通过动态模块公开此服务:
@Module({})
export class CoreServicesModule {
static register(coreConfig: CoreServicesConfig): DynamicModule {
const { serviceName } = coreConfig;
return {
module: CoreServicesModule,
providers: [
{
provide: SERVICE_NAME,
useValue: serviceName
},
StatsService
],
exports: [
StatsService
]
};
}
}
假设我的应用程序相当大,并且我有很多不同的模块。但我每一个都需要StatsService
。
例如,为了能够在其中一个模块中使用StatsService
,我需要做一些类似的事情:
@Module({
imports: [CoreServicesModule.register({ serviceName: 'test', ... })]
})
export class SomeModule { ... }
我需要为每个模块做这件事。。。我们有办法在NestJS中只做一次吗?
或者我们如何重新使用已经注册的模块?
@Global
装饰器在这里也帮不了我,因为我仍然需要在每个地方导入模块。。。
StatService
而无需导入该模块,则@Global()
装饰器将为您提供帮助!
但从您的代码来看,导入CoreServicesModule
的每个模块似乎也会通过动态指定它所拥有的提供者(如ValidationPipe
(来对其进行小的调整
在这种情况下,您不应该将其设为@Global()
,因为全局模块只应注册一次