理解Asp.Net标识接口设计策略



Asp.net Identity Framework中提供的所有I*Store<TUser>接口都继承自IUserStore<TUser>。这迫使每个接口的实现实现与用户相关的方法,或者让单个类全部继承它们。

  • IUserClaimStore<TUser>
  • IUserPasswordStore<TUser>
  • IUserLoginStore<TUser>
  • IUserSecurityStampStore<TUser>

如果我需要为登录或密码、声明或安全戳提供不同的存储,比如说Xml存储而不是EF或任何DB,我也需要实现与用户相关的方法(User:CreateAsync、UpdateAsync、DeleteAsync、FindByIdAsync、FindByNameAsync)。

那么,提供这种架构背后的策略是什么

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方法(毕竟,如果你不能将FindUpdate作为一个条目,那么像IUserPasswordStore<TUser>这样的方法有什么用?),所以它们都实现了IUserStore

您可以实现这些接口并控制帐户数据的存储方式。您可以自定义用户帐户数据,例如,如果您想要与用户关联的更多数据,则可以将其添加到实现IUser的自定义用户类中,并且可以通过实现IUserStore来存储额外的数据。

相关内容

  • 没有找到相关文章

最新更新