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

启动应用时遇依赖注入错误:无法解析UserManager<IdentityUser>服务

解决InvalidOperationException:无法解析UserManager服务

启动应用时触发InvalidOperationException错误,错误信息为:激活NostedServicePro.Controllers.BrukerController时,无法解析Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]类型的服务。

相关代码

BrukerController构造函数

public class BrukerController : Controller
{
    private readonly ServiceProDbContex _dbContext;
    private readonly SignInManager<IdentityUser> _signInManager;
    private readonly ILogger _logger;
    private readonly UserManager<IdentityUser> _userManager;
    private readonly IEmailSender _emailSender;

    public BrukerController(
            ServiceProDbContex dbContext,
            UserManager<IdentityUser> userManager,
            SignInManager<IdentityUser> signInManager,
            ILoggerFactory loggerFactory,
            IEmailSender emailSender)
    {
        _dbContext = dbContext;
        _signInManager = signInManager;
        _logger = loggerFactory.CreateLogger<BrukerController>();
        _userManager = userManager;
        _emailSender = emailSender;
    }
}

Startup.cs中ConfigureServices配置

public void ConfigureServices(IServiceCollection services)
{
    // ...

    // Configure the database context using the connection string from appsettings.json
    services.AddDbContext<ServiceProDbContex>(options =>
        options.UseMySql(Configuration.GetConnectionString("DefaultConnection"), ServerVersion.AutoDetect(Configuration.GetConnectionString("DefaultConnection"))));

    services.AddIdentity<NostedServicePro.Models.Bruker, IdentityRole>(options =>
    {
        options.User.RequireUniqueEmail = false;
     })
        .AddEntityFrameworkStores<ServiceProDbContex>()
        .AddDefaultTokenProviders();
    // ...
    services.AddAuthentication(options =>
    {
        options.DefaultScheme = IdentityConstants.ApplicationScheme;
        options.DefaultSignInScheme = IdentityConstants.ExternalScheme;
    }).AddIdentityCookies(options => { });

    services.AddAuthorization();
}

问题原因

控制器注入的UserManager<IdentityUser>和SignInManager<IdentityUser>,与Startup中通过AddIdentity<NostedServicePro.Models.Bruker, IdentityRole>注册的身份服务类型不匹配。DI容器仅注册了针对自定义用户类Bruker的身份服务实例,无法提供IdentityUser对应的服务,因此触发解析失败。

解决方案

步骤1:修正控制器中的依赖类型

将BrukerController中所有IdentityUser类型的依赖替换为自定义的Bruker类:

public class BrukerController : Controller
{
    private readonly ServiceProDbContex _dbContext;
    private readonly SignInManager<NostedServicePro.Models.Bruker> _signInManager;
    private readonly ILogger _logger;
    private readonly UserManager<NostedServicePro.Models.Bruker> _userManager;
    private readonly IEmailSender _emailSender;

    public BrukerController(
            ServiceProDbContex dbContext,
            UserManager<NostedServicePro.Models.Bruker> userManager,
            SignInManager<NostedServicePro.Models.Bruker> signInManager,
            ILoggerFactory loggerFactory,
            IEmailSender emailSender)
    {
        _dbContext = dbContext;
        _signInManager = signInManager;
        _logger = loggerFactory.CreateLogger<BrukerController>();
        _userManager = userManager;
        _emailSender = emailSender;
    }
}

步骤2:确保自定义用户类继承正确

确认Bruker类正确继承自IdentityUser,示例如下:

public class Bruker : IdentityUser
{
    // 可添加自定义属性
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:17:25