启动应用时遇依赖注入错误:无法解析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
相关产品推荐
相关产品推荐

