Не могу добавить службу AddIdentity в NET Core web API - PullRequest
1 голос
/ 28 января 2020

Я использую NET Core 3.1 + EntityFramework + PSQL. Попытка следовать учебникам и MSDN, но мой код не работает.

Вот мои startup.cs

public void ConfigureServices(IServiceCollection services)
    {            
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {                
                options.TokenValidationParameters = new TokenValidationParameters
                {
                   //params
                };
            });

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<MyContext>()               
    }

Вот мои MyContext.cs

public class MyContext : IdentityDbContext<ApplicationUser> 
{        
    public DbSet<Flowers> Flowers { get; set; }
    public DbSet<Post> Posts { get; set; }

    public MyContext() : base()
    {
        Database.EnsureCreated();
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseNpgsql("Host=localhost...");
    }

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

    }
}

Вот мой ApplicationUser.cs

 public class ApplicationUser : IdentityUser
{                
    public string SpecialNumber{ get; set; }

    public ICollection<Flower> Flowers { get; set; }        
}

Когда я пытаюсь запустить приложение, я получаю исключение System.AggregateException: «Некоторые службы не могут быть построенный '

Некоторые службы не могут быть построены (Ошибка при проверке дескриптора службы' ServiceType: Microsoft.AspNetCore.Identity.ISecurityStampValidator Срок службы: Ограниченный тип реализации: Microsoft.AspNetCore.Identity.SecurityStampValidator *23 * 9 [FlowersApp.Models.ApplicationUser, Microsoft.AspNetCore.Identity.IdentityRole, FlowersApp.Models.MyContext, System.String, Microsoft.AspNetCore.Identity.IdentityUserClaim 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserRole 1 [System.String], Microsoft.AspNetCore.Identity. IdentityUserLogin 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserToken 1 [System.String], Microsoft.AspNetCore.Identity.IdentityRoleClaim 1[System.String]]'.) (Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.ITwoFactorSecurityStampValidator Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.TwoFactorSecurityStampValidator 1 [FlowersApp.Models.ApplicationUser] ': невозможно разрешить службу для типа' FlowersApp.Models.MyContext ', так как ile пытается активировать 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore 9[FlowersApp.Models.ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,FlowersApp.Models.MyContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserRole 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserToken * * 1 [System.String]].) (Ошибка при проверке дескриптора службы 'ServiceType: Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory 1[FlowersApp.Models.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserClaimsPrincipalFactory 2 [FlowersApp.Models.ApplicationUser, Microsoft.AspNetCore.Identity.IdentityRole]': невозможно разрешить службу для типа 'FlowersApp.Models.MyContext' при попытке активировать 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore 9[FlowersApp.Models.ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,FlowersApp.Models.MyContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserRole 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin 1 [Система. String], Microsoft.AspNetCore.Identity.IdentityUserToken 1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim 1 [System.String]] '.) (Ошибка при проверке дескриптора службы' ServiceType: Microsoft.AspNetCore.Identity.UserManager 1[FlowersApp.Models.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserManager 1 [FlowersApp.Models.ApplicationUser ] ': Невозможно разрешить службу для типа' FlowersApp.Models.MyContext 'во время установки возможность активации 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore 9[FlowersApp.Models.ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,FlowersApp.Models.MyContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserRole 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserToken * 1037 1 [System.String]].) (Ошибка при проверке дескриптора службы 'ServiceType: Microsoft.AspNetCore.Identity.SignInManager 1[FlowersApp.Models.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.SignInManager 1 [FlowersApp.Models.ApplicationUser]': невозможно разрешить службу для типа 'FlowersApp.Models .MyContext »при попытке активировать« Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore 9[FlowersApp.Models.ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,FlowersApp.Models.MyContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserRole 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin 1 [System.String], Microsoft.AspNetCore.Identity. IdentityUserToken 1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim 1 [System.String]] '.) (Ошибка при проверке дескриптора службы' ServiceType: Microsoft.AspNetCore.Identity.RoleManager 1[Microsoft.AspNetCore.Identity.IdentityRole] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.RoleManager 1 [Microsoft.AspNetCore.Identity.IdentityRole] ': невозможно разрешить службу для типа 'FlowersApp.Models.MyContext' при попытке активировать 'Microsoft.AspNetCore.Identity.Enti tyFrameworkCore.RoleStore 5[Microsoft.AspNetCore.Identity.IdentityRole,FlowersApp.Models.MyContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserRole 1 [System.String], Microsoft.AspNetCore.Identity.IdentityRoleClaim 1[System.String]]'.) (Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.IUserStore 1 [FlowersApp.Models.ApplicationUser] Время жизни: объем реализации: тип: Microsoft.AspNetCore.Identity *EntityFraSwork. System.String], Microsoft.AspNetCore.Identity.IdentityUserRole 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserToken 1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim 1 [System.String]] ': невозможно разрешить службу для типа' FlowersApp. Models.MyContext 'при попытке активировать' Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore 9[FlowersApp.Models.ApplicationUser,Microsoft.AspNetCore.Identity.IdentityRole,FlowersApp.Models.MyContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserClaim 1 [System.String], Microsoft.AspNetCore.Identity.IdentityUserRole 1[System.String],Microsoft.AspNetCore.Identity.IdentityUserLogin 1 [System.String], Microsoft.AspNetCore.Identity .IdentityUserToken 1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim 1 [System.String]] '.) (Ошибка при проверке дескриптора службы' ServiceType: Microsoft.AspNetCore.Identity.IRoleStore 1[Microsoft.AspNetCore.Identity.IdentityRole] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.EntityFrameworkCore.RoleStore 5 [Microsoft.AspNetCore. Identity.IdentityRole, FlowersApp.Models.MyContext, System.String, Microsoft.AspNetCore.Identity.IdentityUserRole 1[System.String],Microsoft.AspNetCore.Identity.IdentityRoleClaim 1 [System.String]] ': невозможно разрешить службу для типа' FlowersApp.Models.MyContext 'при попытке активации 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.RoleStore 5[Microsoft.AspNetCore.Identity.IdentityRole,FlowersApp.Models.MyContext,System.String,Microsoft.AspNetCore.Identity.IdentityUserRole 1 [System.String], Microsoft.AspNetCore.Identity.IdentityRoleClaim`1 [System.String]].)

Не удается найти причину этой ошибки. Мои предложения унаследованы правильно?

Приложение запускается, когда я удаляю эту часть кода из Startup.cs

 services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<MyContext>()  

Ответы [ 2 ]

1 голос
/ 28 января 2020

Вы забыли написать эту строку в своем ConfigureServices разделе

services.AddDbContext<MyContext>(options =>
        options.UseNpgsql("your connection string"));
1 голос
/ 28 января 2020

Добавьте это в начало вашего ConfigureServices. Вы должны указать платформе, как она может создать экземпляр MyContext (Inject that Service)

 services.AddDbContext<MyContext>(options => /*<<<ADD YOUR DBCONTEXT CONFIGURATION >>>*/);
...