验证服务描述符时出错'ServiceType: Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory`1
Posted
技术标签:
【中文标题】验证服务描述符时出错\'ServiceType: Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory`1【英文标题】:Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory`1验证服务描述符时出错'ServiceType: Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory`1 【发布时间】:2020-11-04 11:36:37 【问题描述】:第一次尝试添加迁移时发生此错误。我已经添加了扩展方法和我的服务类
public void ConfigureServices(IServiceCollection 服务)
services.AddCors();
services.AddControllers();
services.Configure<AppSettings>(AppSettings);
services.ConfigureJWT(Configuration);
services.ConfigureIdentity();
services.AddScoped<ILoginService, LoginService>();
services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, CustomClaimPrincipalFactory>();
public static void ConfigureIdentity(这个IServiceCollection服务)
var builder = services.AddIdentityCore<ApplicationUser>(o =>
o.Password.RequireDigit = true;
o.Password.RequireLowercase = false;
o.Password.RequireUppercase = false;
o.Password.RequireNonAlphanumeric = false;
o.Password.RequiredLength = 6;
o.User.RequireUniqueEmail = true;
);
builder = new IdentityBuilder(builder.UserType, typeof(IdentityRole),
builder.Services);
builder.AddEntityFrameworkStores<AuthDBContext>()
.AddDefaultTokenProviders();
公共类 CustomClaimPrincipalFactory : UserClaimsPrincipalFactory
public CustomClaimPrincipalFactory(
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> optionsAccessor)
: base(userManager, roleManager, optionsAccessor)
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(ApplicationUser user)
ClaimsIdentity identity = await base.GenerateClaimsAsync(user);
identity.AddClaim(new Claim("ServiceSite", user.ServiceSite ?? ""));
return identity;
这里又是错误
访问 Microsoft.Extensions.Hosting 服务时出错。在没有应用程序服务提供商的情况下继续。错误:无法构造某些服务(验证服务描述符“ServiceType:Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory1[AuthenticationService.Entities.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserClaimsPrincipalFactory
1[AuthenticationService.Entities.ApplicationUser]”时出错:无法解析“AuthenticationService.Data”类型的服务.AuthDBContext 尝试激活 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore9[AuthenticationService.Entities.ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,AuthenticationService.Data.AuthDBContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim
1[System.String],Microsoft.AspNetCore.Identity.IdentityUserRole1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin
1[System.String],Microsoft.AspNetCore.Identity。 IdentityUserToken1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim
1[System.String]]'。)(验证服务描述符“ServiceType:Microsoft.AspNetCore.Identity.UserManager1[AuthenticationService.Entities.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserManager
1[AuthenticationService.Entities.ApplicationUser]”时出错:无法解析服务类型'AuthenticationService.Data.AuthDBContext' 尝试激活 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore9[AuthenticationService.Entities.ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,AuthenticationService.Data.AuthDBContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim
1[System.String],Microsoft.AspNetCore.Identity.IdentityUserRole1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin
1[ System.String],Microsoft.AspNetCore.Identity.IdentityUserToken1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim
1[System.String]]'。)(验证服务描述符时出错'ServiceType: Microsoft.AspNetCore.Identity.IUserStore1[AuthenticationService.Entities.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore
9[AuthenticationService.Entities .ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,AuthenticationService.Data.AuthDBContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim1[System.String],Microsoft.AspNetCore.Identity.IdentityUserRole
1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin1[System.String],Microsoft.AspNetCore.Identity.IdentityUserToken
1[ System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim1[System.String]]': Unable to resolve service for type 'AuthenticationService.Data.AuthDBContext' while attempting to activate 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore
9[AuthenticationService.Entities.ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,AuthenticationService.Data.AuthDBContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim@987654338 @1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin1[System.String],Microsoft.AspNetCore.Identity.IdentityUserToken
1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim1[System.String]]'.) (Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.IRoleStore
1[Microsoft.AspNetCore.Identity.IdentityRole] Lifetime: Scoped ImplementationType:米icrosoft.AspNetCore.Identity.EntityFrameworkCore.RoleStore5[Microsoft.AspNetCore.Identity.IdentityRole,AuthenticationService.Data.AuthDBContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserRole
1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim1[System.String]]': Unable to resolve service for type 'AuthenticationService.Data.AuthDBContext' while attempting to activate 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.RoleStore
5[Microsoft.AspNetCore.Identity.IdentityRole,AuthenticationService.Data.AuthDBContext,System.String,Microsoft .AspNetCore.Identity.IdentityUserRole1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim
1[System.String]]'。)(验证服务描述符时出错'ServiceType: Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory1[AuthenticationService.Entities.ApplicationUser] Lifetime: Scoped ImplementationType: AuthenticationService.Common.CustomClaimPrincipalFactory': Unable to resolve service for type 'AuthenticationService.Data.AuthDBContext' while attempting to activate 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore
9[AuthenticationService.Entities.ApplicationUser,Microsoft.AspNetCore .Identity.IdentityRole,AuthenticationService.Data.AuthDBContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim1[System.String],Microsoft.AspNetCore.Identity.IdentityUserRole
1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin1[System.String],Microsoft.AspNetCore.Identity.IdentityUserToken
1[System.String],Microsoft .AspNetCore.Identity.IdentityRoleClaim`1[System.String]]'。)
【问题讨论】:
【参考方案1】:在配置身份存储之前注册 dbcontext
services.AddDbContext<AuthDBContext>();
services.AddIdentity<IdentityUser,IdentityRole>()
.AddEntityFrameworkStores<AuthDBContext>()
.AddDefaultTokenProviders();
【讨论】:
如果没有 dbcontext 怎么办?喜欢使用 dapper 而不是实体框架? 我和@symbiont 有同样的查询 这些将需要一些研究,因为 dapper 是另一个用例。如果我能够在这方面取得任何有意义的进展,将分享对此的更新。以上是关于验证服务描述符时出错'ServiceType: Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory`1的主要内容,如果未能解决你的问题,请参考以下文章
IServiceProvider.GetService(Type serviceType) 的目的是啥?