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

激活控制器时无法解析服务类型问题排查(.NET+MySQL)

排查"激活控制器时无法解析服务类型"问题

从你提供的代码来看,有几个明确的问题会导致依赖注入失败,逐个梳理解决:

1. 控制器未引入DbContext的命名空间

你的SignupController里没有添加MyDbContext所在的Raiders.Api.Data命名空间,导致控制器无法识别MyDbContext类型,DI容器自然无法解析该服务。

修正后的SignupController代码:

using Raiders.Api.Data; // 新增命名空间引用
using Microsoft.AspNetCore.Mvc;

namespace Raiders.Api.Controllers // 补充控制器的命名空间
{
    [ApiController]
    [Route("[controller]")]
    public class SignupController : ControllerBase
    {
        private readonly MyDbContext _context;

        public SignupController(MyDbContext context)
        {
            _context = context;
        }

        [HttpPost]
        public IActionResult SignupUser(string username)
        {
            var newUser = new User
            {
                Username = username
            };

            _context.Users.Add(newUser);
            _context.SaveChanges();

            return Ok("User created successfully");
        }
    }
}

2. User实体类的命名空间不匹配

MyDbContext里引用的是Raiders.Api.Models.User,但你把User类放在了Controllers文件夹下,默认命名空间是Raiders.Api.Controllers,导致DbContext找不到对应的实体类型。

推荐修正方式:
把User.cs移动到Models文件夹,同时修改命名空间:

namespace Raiders.Api.Models
{
    public class User
    {
        public int Id { get; set; }
        public string Username { get; set; }
    }
}

3. 确认连接字符串配置正确

检查appsettings.json里是否配置了有效的MySQL连接字符串,示例配置:

{
  "ConnectionStrings": {
    "MySqlConnection": "server=localhost;port=3306;database=RaidersDb;user=root;password=你的数据库密码;charset=utf8mb4;"
  }
}

4. 验证必要NuGet包已安装

确保项目中安装了以下NuGet包:

  • Microsoft.EntityFrameworkCore
  • Pomelo.EntityFrameworkCore.MySql(或MySql.EntityFrameworkCore,二选一即可)

按以上步骤修正后,重新启动项目即可解决服务解析失败的问题。

内容的提问来源于stack exchange,提问作者Mahad Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:36:04