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

自定义ApplicationUser后Identity依赖注入异常求助

解决InvalidOperationException:无法解析UserManager服务的问题

错误信息

处理请求时发生未处理的异常。
InvalidOperationException: 尝试激活'TestApp_03_RazorPage_Identity.Areas.Identity.Pages.Account.RegisterModel'时,无法解析类型为'Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]'的服务。
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)

问题根源

你的错误核心在于RegisterModel中注入的IUserStore<IdentityUser>和IUserEmailStore<IdentityUser>使用了基类IdentityUser,但你在Program.cs里注册的是自定义的ApplicationUser身份类型。DI容器里只有针对ApplicationUser的服务实例,找不到IdentityUser对应的版本,所以激活RegisterModel时会报错。

你的Program.cs、ApplicationUser、ApplicationDbContext和_LoginPartial.cshtml配置都是正确的,问题仅出在RegisterModel的类型匹配上。

修复步骤

1. 修改RegisterModel中的Store类型定义

将RegisterModel里的Store类型从IdentityUser替换为ApplicationUser:

public class RegisterModel : PageModel
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly UserManager<ApplicationUser> _userManager;
    // 把下面两行的IdentityUser改成ApplicationUser
    private readonly IUserStore<ApplicationUser> _userStore;
    private readonly IUserEmailStore<ApplicationUser> _emailStore;
    private readonly ILogger<RegisterModel> _logger;
    private readonly IEmailSender _emailSender;
}

2. 同步修改构造函数参数类型

如果RegisterModel有对应的构造函数注入,确保构造函数里的参数类型也同步替换:

public RegisterModel(
    SignInManager<ApplicationUser> signInManager,
    UserManager<ApplicationUser> userManager,
    IUserStore<ApplicationUser> userStore, // 这里改成ApplicationUser
    ILogger<RegisterModel> logger,
    IEmailSender emailSender)
{
    _signInManager = signInManager;
    _userManager = userManager;
    _userStore = userStore;
    _emailStore = GetEmailStore(); // 如果有这个方法也要同步调整
    _logger = logger;
    _emailSender = emailSender;
}

3. 检查CreateUser方法(若存在)

如果RegisterModel里有创建用户的方法,比如CreateUser,也要把返回类型改成ApplicationUser:

private ApplicationUser CreateUser()
{
    return Activator.CreateInstance<ApplicationUser>();
}

修改完成后,DI容器就能正确解析对应的服务,错误即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:10:32