全部I*Store<TUser>
Asp.net Identity Framework 中提供的接口(interface)继承自 IUserStore<TUser>
。这会强制每个接口(interface)的实现都实现与 User 相关的方法,或者让单个类继承它们。
-
IUserClaimStore<TUser>
-
IUserPasswordStore<TUser>
-
IUserLoginStore<TUser>
-
IUserSecurityStampStore<TUser>
如果我需要为登录名或密码或声明或 SecurityStamp 提供不同的存储,例如 Xml 存储而不是 EF 或任何 DB,我也需要实现与用户相关的方法(用户: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 方法集(毕竟,如果您不能 IUserPasswordStore<TUser>
或 Find
条目,像 Update
这样的东西有什么用呢?)所以它们各自实现 IUserStore
.
您可以实现这些接口(interface)并控制帐户数据的存储方式。您可以自定义用户帐户数据,例如如果您想要更多与您的用户关联的数据,请将其添加到实现 IUser
的自定义用户类中额外的数据可以通过 IUserStore
的实现来存储.
关于design-patterns - 了解 Asp.Net 身份界面设计策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20418644/