了解Asp.Net身份接口设计策略

时间:2013-12-06 07:42:39

标签: design-patterns asp.net-identity framework-design

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 )。

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

1 个答案:

答案 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实现可以存储额外的数据。