.NET 5集成Autofac时配置Swagger触发依赖解析异常如何解决?
问题解决办法
结论
不需要在Autofac中额外注册Swagger相关服务,该错误由ASP.NET Core自带的API Explorer服务未注册导致。
具体修复步骤
- 第一步:在
ConfigureServices方法中注册API Explorer服务,修改你的Controller注册代码如下:
// 原来的AddControllers后追加AddApiExplorer services.AddControllers().AddApiExplorer();
如果你项目中用的是AddMvc而非AddControllers,则默认已经包含ApiExplorer服务,不需要额外调用该方法。
- 第二步:修正Swagger配置的名称不一致问题,你当前两处配置的文档名不匹配,会导致后续SwaggerUI加载时出现找不到接口文档的错误:
AddSwaggerGen中SwaggerDoc的第一个参数用了nameof(SRW_CRM).ToLower()UseSwaggerUI中SwaggerEndpoint的路径参数用了nameof(My_app).ToLower()
请将两处修改为同一个值,例如统一改为"myapp"。
原理说明
报错中缺失的IApiDescriptionGroupCollectionProvider服务由Microsoft.AspNetCore.Mvc.ApiExplorer包提供,该服务负责收集项目中的接口元数据,是Swagger生成接口文档的必备依赖,默认不会随AddControllers自动注册,需要手动调用AddApiExplorer方法添加。
Swagger相关的所有服务在调用AddSwaggerGen时已经自动注册到.NET的默认服务容器中,只要你正确完成了Autofac和.NET默认容器的集成(即调用UseServiceProviderFactory(new AutofacServiceProviderFactory())完成服务填充),不需要手动在Autofac中注册任何Swagger相关服务。
内容的提问来源于stack exchange,提问作者DiPix
相关产品推荐
相关产品推荐

