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();
额外检查项
- 确认连接字符串配置:确保
appsettings.json中存在正确的MySQL连接字符串:
{ "ConnectionStrings": { "DefaultConnection": "server=localhost;port=3306;database=你的数据库名;user=用户名;password=密码;" } }
- 潜在的查询风险:你的
LoadSingleData方法使用QuerySingle<T>,如果SQL查询返回多条数据或者没有数据时会抛出异常,建议根据业务需求改为QuerySingleOrDefault<T>并处理空值情况:
public T LoadSingleData<T>(string sql) { return _connection.QuerySingleOrDefault<T>(sql) ?? throw new InvalidOperationException("未找到数据或返回多条数据"); }
内容的提问来源于stack exchange,提问作者Nikusha Gabidzashvili
相关产品推荐
相关产品推荐

