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

.NET 4.8升级至.NET 8.0后依赖注入报错:无法解析UserManager服务

解决.NET 8升级中Identity依赖注入失败问题

报错信息

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[ProActiveV2.ApplicationUser]' while attempting to activate 'ProActiveV2.Controllers.AccountController'

问题排查与解决方案

1. 清理ApplicationUser类的冗余引用

你的ApplicationUser类同时引入了.NET Framework时代的旧Identity包和.NET Core的新Identity包,导致类型冲突。修改后的代码如下:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using ProActiveV2.DAL;
using System.Security.Claims;
using System.Threading.Tasks;

namespace ProActiveV2.Models
{
    public class ApplicationUser : IdentityUser
    {
    }

    public class ApplicationDbContext : ProActiveContext
    {
        public ApplicationDbContext(DbContextOptions<ProActiveContext> options)
            : base(options)
        {
        }
    }
}
  • 删除using Microsoft.AspNet.Identity;和using System.Data.Entity;(这两个是EF6与旧版Identity的依赖,和.NET 8不兼容)

2. 确保DbContext正确集成Identity

Identity要求DbContext继承IdentityDbContext以提供用户、角色等表的存储支持,有两种处理方式:

方式一:修改主DbContext继承关系

如果ProActiveContext是项目的主DbContext,直接调整它的继承:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

namespace ProActiveV2.DAL
{
    public class ProActiveContext : IdentityDbContext<ApplicationUser, IdentityRole, string>
    {
        public ProActiveContext(DbContextOptions<ProActiveContext> options)
            : base(options)
        {
        }

        // 保留原有的自定义DbSet定义
        // public DbSet<YourModel> YourModels { get; set; }
    }
}

方式二:使用ApplicationDbContext作为Identity存储

如果不想修改主DbContext,调整program.cs中的服务注册逻辑:

// 替换原ProActiveContext的注册
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("ProActiveContext")));

builder.Services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>() // 这里改为ApplicationDbContext
    .AddDefaultTokenProviders();

3. 校验NuGet包依赖

  • 卸载所有Microsoft.AspNet.Identity.*、EntityFramework(EF6)相关的旧包
  • 安装.NET 8版本的Microsoft.AspNetCore.Identity.EntityFrameworkCore和Microsoft.EntityFrameworkCore.SqlServer包

4. 确认中间件顺序

确保program.cs中中间件顺序符合规范:

app.UseRouting();

app.UseAuthentication(); // 必须在UseAuthorization之前
app.UseAuthorization();

完成以上步骤后重新编译运行,依赖注入即可正常解析UserManager。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:07:21