Blazor Server自定义认证构建报错:无法解析User服务依赖
问题修复:Blazor Server自定义认证服务注入错误
错误根源
错误提示明确说明:激活UserAccountService时无法解析User类型的服务。核心原因有两点:
UserAccountService的构造函数声明了对User的依赖,但未在DI容器中注册User类型- 更关键的是:你的
UserAccountService代码里完全没用到注入的_user字段,这个依赖完全多余
修复步骤
步骤1:清理UserAccountService的无效依赖
直接移除构造函数中的User参数,并删除无用的_user字段:
// 修改前 public class UserAccountService { private readonly ApplicationDbContext _db; private User _user; public UserAccountService(ApplicationDbContext db, User user) { _db = db; _user = user; } // ...其他代码 } // 修改后 public class UserAccountService { private readonly ApplicationDbContext _db; public UserAccountService(ApplicationDbContext db) { _db = db; } // ...其他代码 }
步骤2:修正Login页面的异步调用错误
Authenticate方法中调用GetUser时未加await,会导致判断逻辑失效,需修正:
// 修改前 var userAccount = userAccountSerivce.GetUser(user.UserName, user.Password); // 修改后 var userAccount = await userAccountSerivce.GetUser(user.UserName, user.Password);
步骤3:移除CustomAuthentication的无参构造函数(推荐)
CustomAuthentication中的无参构造函数属于冗余代码,DI容器会自动使用带ProtectedSessionStorage参数的构造函数,保留无参构造可能引发意外问题,建议删除:
// 删除这段代码 public CustomAuthentication() { }
步骤4:调整服务生命周期匹配(可选但重要)
UserAccountService当前注册为Singleton,但它依赖的ApplicationDbContext默认是Scoped生命周期,这种跨生命周期依赖会导致潜在问题,建议将UserAccountService改为Scoped注册:
// Program.cs中修改注册代码 builder.Services.AddScoped<UserAccountService>();
内容的提问来源于stack exchange,提问作者gbm0102
相关产品推荐
相关产品推荐

