Mid #custom-provider#useFactory#di
Custom providers: useClass, useValue, useFactory, useExisting dùng khi nào?
⚡ Trả lời nhanh
Provider có dạng provide + một trong useClass (chọn implementation), useValue (hằng, mock), useFactory (tạo bằng hàm, có thể async và nhận dependency qua inject), useExisting (alias). Token có thể là class, string hoặc Symbol; dùng @Inject(token) để lấy.
export const DB = Symbol('DB');
@Module({
providers: [
{ provide: Mailer, useClass: isProd ? SesMailer : ConsoleMailer },
{ provide: 'API_KEY', useValue: 'abc123' },
{
provide: DB,
inject: [ConfigService],
useFactory: async (cfg: ConfigService) =>
createConnection(cfg.get('DB_URL')),
},
{ provide: 'AliasMailer', useExisting: Mailer },
],
})
export class AppModule {}
// constructor(@Inject(DB) private db: Connection) {}