【发布时间】:2019-10-29 14:29:33
【问题描述】:
我在访问 Startup.cs 类中的 RoleManager 和 UserManager 时遇到问题。这是我用来注册Identity的代码:
services.AddIdentity<User, IdentityRole>(cfg =>
{
cfg.User.RequireUniqueEmail = true;
cfg.SignIn.RequireConfirmedEmail = true;
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<CarinioContext>()
.AddDefaultTokenProviders()
.AddErrorDescriber<CustomIdentityErrorDescriber>();
User 是我的自定义类,它继承自 IdentityUser,并通过一些附加属性对其进行扩展。
我在startup.cs 类中有一个函数来创建角色和用户。我知道这不适合播种,我将来会改变它,但我需要先让它以这种方式工作。这是我的代码:
private async Task CreateRoles()
{
//adding custom roles
var UserManager = _serviceProvicer.GetRequiredService<UserManager<IdentityUser>>();
var RoleManager = _serviceProvicer.GetRequiredService<RoleManager<IdentityRole>>();
string[] roleNames = { "Admin", "Client", "Driver" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
//creating the roles and seeding them to the database
var roleExist = await RoleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
}
}
//creating a super user who could maintain the web app
var poweruser = new User
{
UserName = _configuration.GetSection("UserSettings")["UserName"],
Email = _configuration.GetSection("UserSettings")["UserEmail"],
PhoneNumber = _configuration.GetSection("UserSettings")["PhoneNumer"],
};
string UserPassword = _configuration.GetSection("UserSettings")["UserPassword"];
var _user = await UserManager.FindByEmailAsync(_configuration.GetSection("UserSettings")["UserEmail"]);
if (_user == null)
{
var createPowerUser = await UserManager.CreateAsync(poweruser, UserPassword);
if (createPowerUser.Succeeded)
{
//here we tie the new user to the "Admin" role
await UserManager.AddToRoleAsync(poweruser, "Admin");
}
}
}
程序总是崩溃说:
"One or more errors occurred. (No service for type 'Microsoft.AspNetCore.Identity.RoleManager`1[Microsoft.AspNetCore.Identity.IdentityUser]' has been registered.)"
UserManager 也是如此:
"One or more errors occurred. (No service for type 'Microsoft.AspNetCore.Identity.UserManager`1[Microsoft.AspNetCore.Identity.IdentityUser]' has been registered.)"
我的猜测是我没有以正确的方式访问UserManager 和RoleManager。有谁知道解决办法吗?
【问题讨论】:
标签: c# asp.net asp.net-core dependency-injection asp.net-identity