OptionalwithSynchronous module configuration
Use for global singleton modules with static configuration
OptionalwithAsync module configuration with dependency injection
Use when configuration depends on other services
@Module({ providers: [] })
export class DatabaseModule {
static withRootAsync<T>(options: AsyncModuleOptions<T>): DynamicModule {
return {
providers: [
{
provide: DB_TOKEN,
useFactory: options.useFactory,
inject: options.inject
}
]
}
}
}
// Usage in AppModule
@Module({
imports: [
DatabaseModule.withRootAsync({
inject: [CONFIG_TOKEN],
useFactory: (config) => ({ url: config.databaseUrl })
})
]
})
Module class type (decorated with @Module)
Static methods for dynamic module configuration: