Preciso compartilhar um módulo dinâmico. Na documentação descobri que podemos compartilhar serviços no escopo global. Sim, esta é uma solução. No entanto, gostaria de saber se isso é possível no nível do módulo. É por isso que estou interessado no que acontece quando o módulo dinâmico é registrado algumas vezes . Na prática, vejo que ele cria diferentes instâncias de módulos no NestJS. O comportamento do módulo é diferente do Angular, porém o NestJS gosta de mencionar a semelhança Angular. O módulo de propriedade me leva embora. Agora entendo que é usado apenas para controlar o comportamento do módulo. No entanto, não vejo nenhuma explicação na documentação. Eu vi perguntas semelhantes. Mas não encontrei detalhes que me interessem.
O código a seguir é apenas uma ideia. Não foi verificado.
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 {}
Cumprimentos.
Similaridade, não paridade. Eles são semelhantes , não iguais . Diferenças de comportamento são esperadas
Isto está certo. Por convenção, usamos nomes como
forRoot
quando esperamos fazer algo uma vez e reutilizá-lo a partir do módulo raiz eregister
quando esperamos ter que registrar um módulo várias vezes, mas esta é uma convenção da comunidade onyl e não é uma regra rígida. Ao chamarDynamicModule.forRoot/register/Async()
você criará um módulo dinâmico no contexto do módulo atualSe você deseja compartilhar um módulo dinâmico, sugiro criar um wrapper em torno do módulo dinâmico, para que você tenha a chamada do wrapper
.forRoot()/register()/whaterver()
e exporte o módulo dinâmico por nome (addexports: [DynamicModule]
. Isso permitirá que você importe o wrapper e tenha uma instância do DynamicModule sem precisar torná-lo uma instância global