Autofac WebApi Owin集成中间件执行顺序不符合预期问题
原因分析
- Autofac OWIN 集成的自动中间件注册逻辑存在顺序反转特性:当调用
app.UseAutofacMiddleware(container)时,Autofac会扫描容器内所有继承自OwinMiddleware的注册项,按照注册顺序的逆序将其添加到OWIN管道。
你的代码中先注册FirstMiddleware、后注册SecondMiddleware,Autofac最终添加到管道的顺序是SecondMiddleware在前、FirstMiddleware在后。而OWIN管道默认遵循「先添加的中间件先执行Invoke前置逻辑」的规则,因此日志会先输出SecondMiddleware的执行记录。 - 官方示例的注释存在歧义,其提到的「注册顺序决定执行顺序」仅适用于手动注册中间件的场景,不适用于自动扫描容器中间件的场景。
解决方案
如果需要严格控制中间件的执行顺序,直接使用示例注释中提供的手动注册方案即可,替换app.UseAutofacMiddleware(container)的调用:
// 移除自动扫描注册的代码 // app.UseAutofacMiddleware(container); // 替换为手动按顺序注册,注册顺序即执行顺序 app.UseAutofacLifetimeScopeInjector(container); app.UseMiddlewareFromContainer<FirstMiddleware>(); app.UseMiddlewareFromContainer<SecondMiddleware>();
修改后即可按照预期先执行FirstMiddleware,再执行SecondMiddleware。
内容的提问来源于stack exchange,提问作者gao
相关产品推荐
相关产品推荐

