无法获取UserManager类

Or *_*tan 3 c# user-roles asp.net-core-mvc asp.net-core

我想做的是添加一个新的管理员用户,并为其分配管理员角色。所以..我去了方法Startup.cs类,Configure并编写了以下代码:

var context = app.ApplicationServices.GetService<ApplicationDbContext>();

// Getting required parameters in order to get the user manager
var userStore = new UserStore<ApplicationUser>(context);

// Finally! get the user manager!
var userManager = new UserManager<ApplicationUser>(userStore);
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息:

严重性代码说明项目文件行抑制状态错误CS7036没有给出与UserManager.UserManager(IUserStore,IOptions,IPasswordHasher,IEnumerable>,IEnumerable>,ILookupNormalizer,IdentityErrorDescriber,IServiceProvider,ILogger>的必需形式参数'optionsAccessor'相对应的参数)'FinalProject..NETCoreApp,Version = v1.0 C:\ Users \ Or Natan \ Documents \ Visual Studio 2015 \ Projects \ FinalProject \ src \ FinalProject \ Startup.cs 101有效

这个错误在这里使我丧命。.显然,我需要userManager来创建新用户,但是我无法初始化该东西。

小智 5

您可以使用依赖注入来获取UserManager的实例。只需将一个参数添加到configure方法中,如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, ApplicationDbContext context, UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager)
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建用户和角色。我通常将此代码移到静态类中...

public static class DbInitializer
{
    public static async Task Initialize(ApplicationDbContext context, UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager)
    {
        // Ensure that the database exists and all pending migrations are applied.
        context.Database.Migrate();

        // Create roles
        string[] roles = new string[] { "UserManager", "StaffManager" };
        foreach (string role in roles)
        {
            if (!await roleManager.RoleExistsAsync(role))
            {
                await roleManager.CreateAsync(new IdentityRole(role));
            }
        }

        // Create admin user
        if (!context.Users.Any())
        {
            await userManager.CreateAsync(new ApplicationUser() { UserName = "info@example.com", Email = "info@example.com" }, "p@ssw0rd");
        }

        // Ensure admin privileges
        ApplicationUser admin = await userManager.FindByEmailAsync("info@example.com");
        foreach (string role in roles)
        {
            await userManager.AddToRoleAsync(admin, role);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...并在Startup.Configure方法中调用该方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, ApplicationDbContext context, UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager)
{
    // Code omitted for brevity

    // Create seed data
    DbInitializer.Initialize(context, userManager, roleManager).Wait();
}
Run Code Online (Sandbox Code Playgroud)

在Entity Framework Core的下一版本中,数据库种子将作为一项功能添加