我需要共享一个动态模块。在文档中我发现我们可以在全球范围内共享服务。是的,这是一个解决方案。但是,我想知道在模块级别是否可行。这就是为什么我对动态模块注册几次时会发生什么感兴趣。从实践中,我发现它在 NestJS 中创建了不同的模块实例。该模块的行为与 Angular 中的不同,但 NestJS 喜欢提及 Angular 的相似性。属性模块带我走了。现在我明白它仅用于控制模块行为。但是,我在文档中没有看到任何解释。我看到类似的问题。但我还没有找到我感兴趣的细节。
以下代码只是想法。尚未对其进行检查。
import { DynamicModule, Module } from '@nestjs/common';
import { ConfigService } from './config.service';
@Module({})
export class ConfigModule {
static register(options: Record<string, any>): DynamicModule {
return {
module: ConfigModule,
providers: [
{
provide: 'CONFIG_OPTIONS',
useValue: options,
},
ConfigService,
],
exports: [ConfigService],
};
}
}
export const ConfiguredConfigModule = ConfigModule.register({key: 'flower'});
...
@Module({
imports: [ConfiguredConfigModule]
})
export class AppModule {}
问候。
相似性,而不是奇偶性。他们相似又不一样。行为上的差异是预期的
这是对的。按照惯例,我们使用的名称就像
forRoot
当我们希望制作一次并从根模块重用它时,以及register
当我们希望必须多次注册模块时,但这是 onyl 社区惯例,根本不是硬性规则。当您调用时,DynamicModule.forRoot/register/Async()
您将在当前模块的上下文中创建一个动态模块如果您想共享动态模块,我建议围绕动态模块创建一个包装器,这样您就可以通过名称调用包装器
.forRoot()/register()/whaterver()
并导出动态模块(添加exports: [DynamicModule]
)。这将允许您导入包装器并拥有一个实例DynamicModule 的实例,而无需将其设为全局实例