C# VisualStudioIdentity Framework用户管理器

C# VisualStudioIdentity Framework用户管理器,c#,asp.net,asp.net-identity,C#,Asp.net,Asp.net Identity,我的问题是我试图创建一个“角色”并将其添加到用户。它在引用UserManager类时出错,如下星号所示 public ActionResult RoleAddToUser(string UserName, string RoleName) { ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).Fi

我的问题是我试图创建一个“角色”并将其添加到用户。它在引用UserManager类时出错,如下星号所示

 public ActionResult RoleAddToUser(string UserName, string RoleName)
 {
 ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
        var account = new AccountController();
        account.**UserManager**.AddToRole(user.Id, RoleName);
 var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
        ViewBag.Roles = list;

        return View("ManageUserRoles");
我的账户控制员如下

 public class AccountController : Controller
 {
    public UserManager<ApplicationUser, string> um = new UserManager<ApplicationUser, string>(ApplicationUser user, string key);
公共类AccountController:控制器
{
public UserManager um=new UserManager(ApplicationUser用户,字符串键);
我也试过了

 public UserManager<ApplicationUser, string> um = new UserManager<>();
 public UserManager<ApplicationUser, string> um = new UserManager<ApplicationUser,string>();
public UserManager um=new UserManager();
两人都错了,前者说:

重载的方法有一些无效参数

后者说:

预期类型

我也试过了

 public UserManager<ApplicationUser, string> um = new UserManager<>();
 public UserManager<ApplicationUser, string> um = new UserManager<ApplicationUser,string>();
public UserManager um=new UserManager();
这就产生了错误:

此方法不包含接受0个参数的构造函数

如何正确实现/调用/使用UserManager类?

根据MSDN

UserManager具有以下构造函数定义

  public UserManager(   IUserStore<TUser, TKey> store)
public用户管理器(IUserStore)
因此,当您初始化它时,首先需要有IUserStore实例,如下所示

 public class AccountController : Controller
 {
    public UserManager<ApplicationUser, string> um = new UserManager<ApplicationUser, string>(ApplicationUser user, string key);
  • 根据需要实施IUserStore

     public class MyUserStore<T> : IUserStore<T> where T: ApplicationUser
             { }
    
    公共类MyUserStore:IUserStore,其中T:ApplicationUser
    { }
    
  • 创建MyUserStore的实例

    MyUserStore  userStore = new MyUserStore<ApplicationUser>();
    
    MyUserStore userStore=new MyUserStore();
    
  • 将您的用户管理器创建为

     UserManager<ApplicationUser, string> um = new UserManager(userStore);
    
    UserManager um=newusermanager(userStore);
    

  • 感谢您的回复。我在AccountController之前在AccountController中实现了您的第一个注意事项。我在AccountController中实现了您的第二个步骤,这很好。我在AccountController中的第二个步骤下实现了您的第三个步骤,当我传入“userStore”对象时,它会出错。错误消息为“字段初始值设定项无法引用非静态字段/方法/属性。请勿对初始值设定项使用静态