design-patterns - 了解 Asp.Net 身份界面设计策略

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

全部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/

相关文章:

c# - 如何使用组织身份验证从 Blazor Server 中的身份获取用户属性

c# - IsPersistent 不起作用 - Cookie 仅对当前 session 有效

c# - 使用 AspNet.Identity UserManager 时检测更改

.net - MethodImplOptions.InternalCall 的意义何在?

generics - 返回各种类型的内部表的设计模式

c++ - 有多少听众是太多观察者模式?

java - 如何在 Spring @Service 和非 Spring 对象之间集成?

c++ - 我可以使用哪些设计模式?

.net - 为什么 Array.Sort() 和 Array.IndexOf() 方法是静态的?