Trung BìnhNestJS iconNestJS

Provider scopes trong NestJS: DEFAULT, REQUEST, TRANSIENT — khác nhau gì?

NestJS có 3 provider scopes kiểm soát vòng đời instance:

DEFAULT (Singleton): một instance dùng cho toàn app — đây là default và phổ biến nhất. Phù hợp cho stateless services như DatabaseService, ConfigService.

REQUEST: tạo instance mới cho mỗi incoming request, bị destroy sau khi response xong. Dùng khi service cần lưu request-specific data (tenant context, request ID, user info). Nhược điểm: tốn memory hơn và các dependencies của nó cũng bị kéo thành REQUEST scope.

TRANSIENT: tạo instance mới mỗi lần được inject — không share giữa các consumers. Dùng khi cần isolated state mỗi lần dùng.

Scope injection chain: nếu SERVICE_A (REQUEST scope) được inject vào SERVICE_B, SERVICE_B cũng tự động trở thành REQUEST scope. Pitfall: dùng REQUEST scope tràn lan làm giảm performance đáng kể — chỉ dùng khi thực sự cần.

Xem toàn bộ NestJS cùng filter theo level & chủ đề con.

Mở danh sách NestJS