不能使用服务容器中的服务和默认值实例化SwaggerGenerator类型的构造函数

Don*_*ana 24 c# swagger swagger-3.0

我正在尝试将Swagger添加到我的项目中。收到的错误如下。

无法使用服务容器中的服务和默认值实例化“ Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator”类型的构造函数。

由于我尚未对Swagger二进制文件本身进行任何更改,因此仅安装了软件包Swashbuckle.AspNetCoreSwashbuckle.AspNetCore.Swagger(均为4.0.1版),我假设这与配置有关。按照这里的建议,我已经设置了如下所示的配置。

services.AddSwaggerGen(_ =>
{
  _.SwaggerDoc("v1", new Info { Version = "v1", Title = "My API" });
});

app.UseSwagger();
app.UseSwaggerUI(_ => { _.SwaggerEndpoint("/swagger/v1/swagger.json", "API docs"); });
Run Code Online (Sandbox Code Playgroud)

我不确定是否丢失了一个软件包,是否其中一个是错误的版本,或者我提供的设置配置是否足够。

小智 41

正如提问者在评论中指出的那样,为我解决了这个问题的是在中添加了对Api Explorer的引用ConfigureServices

具体来说,所需的行是:

services.AddMvcCore()
        .AddApiExplorer();
Run Code Online (Sandbox Code Playgroud)

  • 给下一个遇到我同样问题的人发表评论。我的所有“其他”项目都是从使用过的`.AddMvc()`复制粘贴而成的,后者在幕后执行了.AddApiExplorer()`。我试图向只使用`.AddMvcCore()`的新项目中添加招摇,但没有意识到它忽略了`.AddApiExplorer()`服务。 (3认同)

Imr*_*deh 5

.Net 7 更新的解决方案:

我知道(TS Taylor)的答案是正确的,但对于在 .net 7 中寻找更新答案的人来说:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddMvcCore();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
Run Code Online (Sandbox Code Playgroud)