[英]NestJS - how to provide services of dynamic modules
我正在努力弄清楚如何提供從 DynamicModule 到常規模塊的服務。 偽代碼如下:
app.module.ts
@Global()
@Module({
imports: [
DynamicModule.forRoot(config),
RegularModule,
],
providers: [],
exports: [],
})
export class AppModule {}
動態模塊.ts
@Module({})
export class DynamicModule implements OnModuleInit, OnModuleDestroy {
constructor(private dynamicService: dynamicService) {}
static forRoot(config: Config): DynamicModule {
return {
module: DynamicModule,
imports: [],
providers: [
{
provide: CONFIG_TOKEN,
useValue: config,
},
DynamicService,
],
exports: [
DynamicService,
],
};
}
}
動態服務.ts
@Injectable()
export class DynamicService {
constructor(
@Inject(CONFIG_TOKEN) private readonly config: Config,
) {}
}
常規模塊.ts
@Module({
imports: [],
providers: [RegularService, DynamicService],
exports: [RegularService],
})
export class RegularModule {}
常規服務.ts
@Injectable()
export class RegularService {
constructor(
private readonly dynamicService: DynamicService
) {}
}
向RegularModule 提供DynamicService 還需要在RegularModule 中提供CONFIG_TOKEN,如果更多模塊依賴於DynamicService 並且似乎不是正確的方法,這似乎很奇怪且不實用。
我缺少什么概念以及使用 DynamicModule 服務的正確方法是什么?
DynamicModule 方法中的 forFeature 會是正確的方向嗎?
動態模塊是需要某種上下文定義輸入的模塊,經典示例是數據庫模塊,它至少需要主機 url 和憑據,這會因應用程序而異。
這意味着當forRoot(input)
返回時,您將擁有一個與任何常規(非動態)模塊一樣的模塊。 因此,您可以利用動態模塊服務中的config
值,在動態模塊上導出服務,然后將該服務注入到導入動態模塊的其他模塊上。
無需在注入dynamicService
的服務上也注入config
值。
如果您需要直接訪問regularService
中的config
值,並且該值在多個服務和模塊之間共享,那么您應該查看ConfigModule
並將該config
值視為 env。 如果由於某些非常具體的原因它不能或不應該在 env 中,那么您仍然應該創建一個單獨的模塊來提供此config
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.