Asp.net Identity Framework中提供的所有I*Store<TUser>
接口都继承自IUserStore<TUser>
。这迫使每个接口的实现实现User相关方法或让单个类继承它们。
IUserClaimStore<TUser>
IUserPasswordStore<TUser>
IUserLoginStore<TUser>
IUserSecurityStampStore<TUser>
如果我需要为登录或密码或Claims或SecurityStamps提供不同的存储空间,比如Xml存储而不是EF或任何数据库,我还需要实现与用户相关的方法(用户:CreateAsync,UpdateAsync,DeleteAsync,FindByIdAsync,FindByNameAsync )。
那么,提供这种架构背后的策略是什么?
答案 0 :(得分:2)
IUserStore<>
定义了CRUD次操作:
public interface IUser
{
string Id { get; }
string UserName { get; set; }
}
public interface IUserStore<TUser> : IDisposable where TUser : IUser
{
Task CreateAsync(TUser user);
Task DeleteAsync(TUser user);
Task<TUser> FindByIdAsync(string userId);
Task<TUser> FindByNameAsync(string userName);
Task UpdateAsync(TUser user);
}
由于每个I*Store<TUser>
都必须提供完整的CRUD方法(如果你不能IUserPasswordStore<TUser>
或Find
,那么Update
之类的用法会是什么用途?一个条目?)所以他们每个都实现IUserStore
。
您可以实施这些界面并控制帐户数据的存储方式。您可以自定义用户帐户数据,例如如果您想要与您的用户关联的更多数据,请将其添加到实现IUser
的自定义用户类中,并且您的IUserStore
实现可以存储额外的数据。