【问题标题】:ASP.Net Core Some services are not able to be constructed When Configuring the Identity ModelASP.Net Core 配置身份模型时部分服务无法构建
【发布时间】:2022-01-21 09:28:51
【问题描述】:

当我添加行时 services.ConfigureIdentity();在我的 Asp.Net Core wen API 项目中,会触发以下错误:

启动应用程序时出错。

AggregateException:无法构造某些服务(验证服务描述符“ServiceType:Microsoft.AspNetCore.Identity.DataProtectorTokenProvider1[DCL.Models.WritableModels.User] Lifetime: Transient ImplementationType: Microsoft.AspNetCore.Identity.DataProtectorTokenProvider1[DCL.Models.WritableModels.User]”时出错:无法解析服务在尝试激活“Microsoft.AspNetCore.Identity.DataProtectorTokenProvider`1[DCL.Models.WritableModels.User]”时键入“Microsoft.AspNetCore.DataProtection.IDataProtectionProvider”。)

我的用户模型:

public class User : IdentityUser<int>
{
    ....
}

我的榜样:

public class Role : IdentityRole<int>
{
    public Role() { }
    public Role(string name) { Name = name; }
}

我的服务扩展:

    public static class ServiceExtensions
    {
        #region Identity Configuration
        public static void ConfigureIdentity(this IServiceCollection services)
        {
    
            var builder = services.AddIdentityCore<User>(q => { q.User.RequireUniqueEmail = false; });
            builder = new IdentityBuilder(builder.UserType, typeof(Role), services);
            builder.AddEntityFrameworkStores<DataAccessContext>().AddDefaultTokenProviders();
        }
        #endregion
    }

我的 DataAccessContext:

public class DataAccessContext : IdentityDbContext<User, Role, int>
{
    public DataAccessContext(DbContextOptions<DataAccessContext> options) : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        #region Identity Models Configuration
        builder.Entity<User>(entity => { entity.ToTable(name: "Users"); });
        builder.Entity<Role>(entity => { entity.ToTable(name: "Roles"); });
        builder.Entity<IdentityUserRole<int>>(entity => { entity.ToTable("UserRoles"); });
        builder.Entity<IdentityUserClaim<int>>(entity => { entity.ToTable("Claims"); });
        builder.Entity<IdentityUserLogin<int>>(entity => { entity.ToTable("Logins"); });
        builder.Entity<IdentityRoleClaim<int>>(entity => { entity.ToTable("RoleClaims"); });
        builder.Entity<IdentityUserToken<int>>(entity => { entity.ToTable("UserTokens"); });
        #endregion
    }
}

最后是我的启动:

public void ConfigureServices(IServiceCollection services)
{
    services.ConfigureIdentity();
}

【问题讨论】:

    标签: c# asp.net asp.net-core asp.net-web-api asp.net-identity


    【解决方案1】:

    更新您的代码如下:-

    扩展/ConfigureIdentityServiceExtensions.cs

     public static class ConfigureIdentityServiceExtensions
        {
            #region Identity Configuration
            public static IServiceCollection ConfigureIdentityServiceExtensions(this IServiceCollection services)
            {
        
                var builder = services.AddIdentityCore<User>(q => { q.User.RequireUniqueEmail = false; });
                builder = new IdentityBuilder(builder.UserType, typeof(Role), services);
                builder.AddEntityFrameworkStores<DataAccessContext>().AddDefaultTokenProviders();
            }
            #endregion
        }
    

    Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddConfigureIdentityServices();
    }
    

    现在它可以正常工作了。

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 2022-01-11
      • 1970-01-01
      • 2017-07-26
      • 2019-07-11
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多