Asp.net核心身份使用EF核心TPT时如何注册服务器

时间:2019-02-25 09:56:13

标签: asp.net-core asp.net-identity

我将ApplicationUser设置为继承IdentityUser

public class ApplicationUser : IdentityUser
{    
    //some properties
}

并添加两个类继承ApplicationUser使用EF核心TPH

public class SystemManager : ApplicationUser
{
    //some properties
}
public class NormalUser : ApplicationUser
{
    //some properties
}

我需要在运行时添加一些数据,并且在Program.Main()处有类似的代码

var services = scope.ServiceProvider;
var userManager = services.GetRequiredService<UserManager<SystemManager>>();

Starup.ConfigureServices()上注册服务,例如

services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
                {
                    options.Lockout.AllowedForNewUsers = true;
                    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
                    options.Lockout.MaxFailedAccessAttempts = 5;
                    options.User.RequireUniqueEmail = false;
                    options.Password.RequireNonAlphanumeric = false;
                    options.Password.RequireUppercase = false;
                    options.Password.RequireLowercase = false;
                })
                .AddUserManager<NormalUser>()
                .AddUserManager<SystemManager>()
                .AddEntityFrameworkStores<DBContext>()
                .AddDefaultTokenProviders();

然后我出现了异常

  System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Identity.UserManager`1[ApplicationCore.Entity.Data.SystemManager]' has been registered.
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Application.Program.Main(String[] args)

下一步我该怎么做?

0 个答案:

没有答案