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

ASP.NET Core激活UserController时无法解析ApplicationUser服务报错

问题描述

开发用户个人资料页时触发未处理异常,错误信息如下:

InvalidOperationException: Unable to resolve service for type 'Website_friend_feature.Areas.Identity.Data.ApplicationUser' while attempting to activate 'Website_friend_feature.Controllers.UserController'.

已配置AuthDbContext数据库上下文与身份认证、授权中间件,参照公开方案排查未解决问题,怀疑视图模型调用存在错误。

错误原因

报错和视图模型调用无关,是依赖注入配置存在两个明确问题:

  1. 你在UserController构造函数中直接注入了ApplicationUser类型,ApplicationUser是对应用户数据的实体类,从未被注册到依赖注入容器中,容器无法为其解析实例,这是触发本次InvalidOperationException的直接原因。你之前查到的配置Identity服务的方案只覆盖了第二个问题,没有处理这个直接注入实体的错误,所以修改后仍然报错。
  2. 你仅在Startup中配置了数据库上下文、认证授权中间件,没有注册Identity核心服务,后续即使解决了第一个问题,UserManager<ApplicationUser>也会出现解析失败的问题。
修复方案

按以下步骤调整代码即可:

  • 移除控制器构造函数中对ApplicationUser的全局注入。实体类不需要注册到DI容器,也不适合做全局注入——每次请求对应的用户数据是动态查询得到的,全局注入固定的实体实例会引发数据混乱、并发错误。你需要的用户实例,都可以通过UserManager在具体Action中查询获取。
    修正后的控制器基础代码参考:
    using Microsoft.AspNetCore.Identity;
    using Microsoft.AspNetCore.Mvc;
    using System.Security.Claims;
    using System.Threading.Tasks;
    using Website_friend_feature.Areas.Identity.Data;
    
    namespace Website_friend_feature.Controllers
    {
        public class UserController : Controller
        {
            private readonly UserManager<ApplicationUser> _userManager;
    
            public UserController (UserManager<ApplicationUser> userManager)
            {
                _userManager = userManager;
            }
    
            // 个人资料页Action示例
            public async Task<IActionResult> Profile()
            {
                // 获取当前登录用户ID,查询对应用户实体
                var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
                var user = await _userManager.FindByIdAsync(userId);
                // 将用户数据传递给视图展示
                return View(user);
            }
        }
    }
    
  • 在Startup.cs的ConfigureServices方法中补全Identity服务注册,替换原来单独注册DbContext的代码段:
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddRazorPages();
    
        services.AddDbContext<AuthDbContext>(options => 
            options.UseSqlServer(Configuration.GetConnectionString("AuthDbContextConnection")));
        
        // 注册Identity服务,绑定用户实体与数据库上下文
        services.AddDefaultIdentity<ApplicationUser>(options => {
            options.SignIn.RequireConfirmedAccount = false; // 可根据自身业务需求调整配置项
        })
        .AddEntityFrameworkStores<AuthDbContext>();
    }
    
  • 调整完成后重新生成项目,再启动访问用户资料页即可解决服务解析报错。
注意点

不要将EF Core实体类注册到依赖注入容器,这类类型代表单条数据记录,生命周期随查询结果动态生成,所有数据操作都应该通过对应的服务(比如UserManager、DbContext)来完成。

内容的提问来源于stack exchange,提问作者roger blinkins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:57:21