You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core报错:激活控制器时无法解析DataContext服务

问题解决:Unable to resolve service for type 'Api.Data.DataContext'

核心原因

你遇到的错误是因为ASP.NET Core依赖注入容器中没有注册DataContext类型,当控制器尝试通过构造函数获取DataContext实例时,DI系统找不到对应的服务,因此抛出激活失败的异常。

解决方案

在项目的Program.cs文件中,将DataContext注册到依赖注入容器中。由于DataContext持有数据库连接,推荐使用Scoped生命周期(每个请求创建一个实例):

var builder = WebApplication.CreateBuilder(args);

// 注册DataContext到DI容器
builder.Services.AddScoped<Api.Data.DataContext>();

// 其他服务注册(比如Controllers、Swagger等)
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// 中间件配置...
app.UseSwagger();
app.UseSwaggerUI();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

额外检查项

  1. 确认连接字符串配置:确保appsettings.json中存在正确的MySQL连接字符串:
{
  "ConnectionStrings": {
    "DefaultConnection": "server=localhost;port=3306;database=你的数据库名;user=用户名;password=密码;"
  }
}
  1. 潜在的查询风险:你的LoadSingleData方法使用QuerySingle<T>,如果SQL查询返回多条数据或者没有数据时会抛出异常,建议根据业务需求改为QuerySingleOrDefault<T>并处理空值情况:
public T LoadSingleData<T>(string sql)
{
    return _connection.QuerySingleOrDefault<T>(sql) ?? throw new InvalidOperationException("未找到数据或返回多条数据");
}

内容的提问来源于stack exchange,提问作者Nikusha Gabidzashvili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:13:15