ASP.NET Identity注册按钮报错:无法解析UserManager服务
问题排查:Identity自定义User实体导致UserManager无法解析
核心原因
你在注册Identity服务时,依然使用默认的IdentityUser作为泛型参数,但你的RegisterModel依赖的是UserManager<Orchard.Entities.User>,DI容器中并未注册该类型的服务,导致激活RegisterModel时无法解析依赖。
解决步骤
修改Identity服务注册代码
将AddDefaultIdentity的泛型参数替换为你的自定义User实体:builder.Services.AddDefaultIdentity<Orchard.Entities.User>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<OrchardDBContext>();更新DbContext继承关系
确保你的OrchardDBContext继承自IdentityDbContext<Orchard.Entities.User>,而非默认的IdentityDbContext或IdentityDbContext<IdentityUser>:using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Orchard.Entities; namespace YourNamespace { public class OrchardDBContext : IdentityDbContext<User> { public OrchardDBContext(DbContextOptions<OrchardDBContext> options) : base(options) { } // 添加自定义实体的DbSet public DbSet<Address> Addresses { get; set; } public DbSet<Messages> Messages { get; set; } } }确认RegisterModel的注入类型
检查RegisterModel的构造函数,确保注入的是UserManager<Orchard.Entities.User>:using Orchard.Entities; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Orchard.Areas.Identity.Pages.Account { public class RegisterModel : PageModel { private readonly SignInManager<User> _signInManager; private readonly UserManager<User> _userManager; private readonly IUserStore<User> _userStore; public RegisterModel( UserManager<User> userManager, IUserStore<User> userStore, SignInManager<User> signInManager) { _userManager = userManager; _userStore = userStore; _signInManager = signInManager; } // 其他页面逻辑... } }重新生成数据库迁移(若有旧迁移)
如果之前使用默认IdentityUser生成过迁移文件,需删除旧迁移,重新执行以下命令生成新迁移并更新数据库:dotnet ef migrations add InitialCustomUser dotnet ef database update
内容的提问来源于stack exchange,提问作者Aethillium
相关产品推荐
相关产品推荐

