DynamicModule is a NestJS module pattern that allows modules to be configured at runtime via static factory methods (typically forRoot() or register()). The method returns a DynamicModule object specifying module, providers, exports, and optionally global.

@Module({ providers: [Connection], exports: [Connection] })
export class DatabaseModule {
  static forRoot(entities = [], options?): DynamicModule {
    const providers = createDatabaseProviders(options, entities);
    return { module: DatabaseModule, providers, exports: providers };
  }
}

Properties returned by the dynamic module extend (not override) the @Module() decorator metadata. The method can be synchronous or return a Promise. Imported via imports: [DatabaseModule.forRoot([User])].

The CacheModule’s register() method for configuring Redis caching is a real-world example of DynamicModule usage.