我想使用Dapper创建自己的Microsoft.AspNet.Identity存储数据实现(这意味着,我删除了EntityFramework默认实现)。
我创建了MyUserStore
,它实现了IUserStore
并将其传递给UserManager
,如下所示:
private UserManager<User> _userManager { get; set; }
public AccountController() : this(new UserManager<User>(new MyUserStore())) {}
public AccountController(UserManager<User> userManager) {
_userManager = userManager;
}
一切都很好,直到我不想添加角色(我在MyUserStore
界面IUserRoleStore
中实现)。
当我看到UserManager
签名时,我有点困惑,因为我不知道这些方法是如何工作的:
[AsyncStateMachine(X)]
[DebuggerStepThrough]
public virtual Task<IList<string>> GetRolesAsync(string userId);
[AsyncStateMachine(X)]
[DebuggerStepThrough]
public virtual Task<bool> IsInRoleAsync(string userId, string role);
我可以打电话给他们,并且可以看到我是如何进入MyUserStore
的,但肯定是用其他方法:
public Task<IList<string>> GetRolesAsync(User user)
public Task<bool> IsInRoleAsync(User user, string role)
所以,我有点卡住了,因为我不明白,我应该如何处理UserManager
,顺便说一下,RoleManager
.
我应该实现自己的UserManager
还是必须仅使用默认实现,为什么?
如果问题是蹩脚的,那就太好了,但是有很多关于UserStore
的信息,但没有关于UserManager, RoleManager
的信息。
在选择实现自己的用户存储时,您可以实现角色,但要存储角色。
这些方法仅在实现 IRoleStore 时才有效