2017-09-19 271 views
0
public class DbInitializer 
{ 
    public static async Task CreateAdmin(IServiceProvider service) 
    { 
     UserManager<AppUser> userManager = service.GetRequiredService<UserManager<AppUser>>(); 
     RoleManager<IdentityRole> roleManager = service.GetRequiredService<RoleManager<IdentityRole>>(); 

     string username = "Admin"; 
     string email = "[email protected]"; 
     string pass = "Secrete90"; 
     string role = "Admins"; 

     if(await userManager.FindByNameAsync(username)== null) 
     { 
      if(await roleManager.FindByNameAsync(role)== null) 
      { 
       await roleManager.CreateAsync(new IdentityRole(role)); 
      } 
      var user = new AppUser { UserName = username, Email = email }; 

      var result = await userManager.CreateAsync(user, pass); 
      if (result.Succeeded) { await userManager.AddToRoleAsync(user, role); } 
     } 
    } 

當我在啓動時運行此代碼時,出現無法在啓動類中限定代碼的錯誤。ASP.NET Core 2種子角色和用戶

DbInitializer.CreateAdmin(app.ApplicationServices).Wait(); 
+0

https://stackoverflow.com/questions/45805561/asp-net-core-2-identity-di-errors-with -custom-roles這可能對你有幫助 –

回答

1

.NET Core 2呼叫您的種子邏輯需要被移動到program.cs類的Main法。

實施例的Program.cs

public static void Main(string[] args) { 
    var host = BuildWebHost(args); 
    using (var scope = host.Services.CreateScope()) { 
     var services = scope.ServiceProvider; 
     var userManager = services.GetRequiredService<UserManager<AppUser>>(); 
     var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>(); 
     DbInitializer.CreateAdmin(userManager, roleManager).Wait(); 
    } 
    host.Run(); 
} 

更新DbInitializer

public class DbInitializer 
{ 
    public static async Task CreateAdmin(UserManager<AppUser> userManager, RoleManager<IdentityRole> roleManager) 
    { 

     string username = "Admin"; 
     string email = "[email protected]"; 
     string pass = "Secrete90"; 
     string role = "Admins"; 

     if(await userManager.FindByNameAsync(username)== null) 
     { 
      if(await roleManager.FindByNameAsync(role)== null) 
      { 
       await roleManager.CreateAsync(new IdentityRole(role)); 
      } 
      var user = new AppUser { UserName = username, Email = email }; 

      var result = await userManager.CreateAsync(user, pass); 
      if (result.Succeeded) { await userManager.AddToRoleAsync(user, role); } 
     } 
    } 
相關問題