IPipelineBehavior 拦截链

接口

#[async_trait]
pub trait IPipelineBehavior: Send + Sync {
    async fn handle(
        &self,
        req: Box<dyn Any + Send>,
        next: BoxedNextFn,
        svc: Arc<dyn IServiceResolver>,
    ) -> Result<Box<dyn Any + Send>>;
}

用途

在 Handler 执行前后插入横切逻辑:

| Behavior | 职责 | |----------|------| | ValidationBehavior | 请求校验 | | LoggingBehavior | 记录请求/响应 | | CachingBehavior | 响应缓存 | | TransactionBehavior | 数据库事务包装 |

示例骨架

pub struct ValidationBehavior;

#[async_trait]
impl IPipelineBehavior for ValidationBehavior {
    async fn handle(
        &self,
        req: Box<dyn Any + Send>,
        next: BoxedNextFn,
        svc: Arc<dyn IServiceResolver>,
    ) -> Result<Box<dyn Any + Send>> {
        // 前置:校验 req
        // 调用 next 继续管道
        let result = next(req, svc).await?;
        // 后置:处理 result
        Ok(result)
    }
}

当前状态

`IPipelineBehavior` 当前为骨架实现,完整的类型安全管道链在后续版本通过类型擦除完善。生产项目可先在 Handler 内实现校验逻辑。

小结

PipelineBehavior 是 Mediator 层的 AOP 机制,适合跨 Handler 的横切关注点。

下一节:[事件发布与订阅](event-pub-sub.md)