</>
⌕
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) {}
🃏 Ôn bằng flashcard