ExecutionContext extends ArgumentsHost, cung cấp thông tin về execution context hiện tại (HTTP, WebSocket, RPC). Guards, Interceptors và Exception Filters đều nhận ExecutionContext.
Các methods quan trọng:
- getType(): trả về 'http' | 'ws' | 'rpc'
- switchToHttp(): trả về HttpArgumentsHost với getRequest(), getResponse()
- switchToWs(): trả về WsArgumentsHost với getData(), getClient()
- switchToRpc(): cho microservices
- getHandler(): trả về handler function đang được gọi
- getClass(): trả về controller class
Dùng getHandler() và getClass() kết hợp Reflector để đọc metadata:
typescript
const roles = this.reflector.getAllAndOverride<string[]>('roles', [
context.getHandler(), // Route-level metadata
context.getClass(), // Controller-level metadata
]);Pattern này cho phép metadata được định nghĩa ở cả route lẫn controller, với route-level ưu tiên hơn.