namespace Dpz.Core.Auth.Service;
public sealed class UserInfoStore(IAccountService accountService) : IUserStore<VmUserInfo>
{
public void Dispose() { }
public async Task<string> GetUserIdAsync(VmUserInfo user, CancellationToken cancellationToken)
{
return await Task.Run(() => user.Id, cancellationToken);
}
public async Task<string?> GetUserNameAsync(
VmUserInfo user,
CancellationToken cancellationToken
)
{
return await Task.Run(() => user.Name, cancellationToken);
}
public async Task SetUserNameAsync(
VmUserInfo user,
string? userName,
CancellationToken cancellationToken
)
{
ArgumentNullException.ThrowIfNull(userName);
await Task.Run(() => user.Name = userName, cancellationToken);
}
public async Task<string?> GetNormalizedUserNameAsync(
VmUserInfo user,
CancellationToken cancellationToken
)
{
return await Task.Run(() => user.Name, cancellationToken);
}
public async Task SetNormalizedUserNameAsync(
VmUserInfo user,
string? normalizedName,
CancellationToken cancellationToken
)
{
ArgumentNullException.ThrowIfNull(normalizedName);
await Task.Run(() => user.Name = normalizedName, cancellationToken);
}
public Task<IdentityResult> CreateAsync(VmUserInfo user, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
public Task<IdentityResult> UpdateAsync(VmUserInfo user, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
public Task<IdentityResult> DeleteAsync(VmUserInfo user, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
public async Task<VmUserInfo?> FindByIdAsync(string userId, CancellationToken cancellationToken)
{
return await accountService.GetOneUserAsync(userId, cancellationToken);
}
public async Task<VmUserInfo?> FindByNameAsync(
string normalizedUserName,
CancellationToken cancellationToken
)
{
return await accountService.GetUserInfoByNameAsync(normalizedUserName, cancellationToken);
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码解释
这是一个 ASP.NET Core Identity 框架的自定义用户存储实现类。
类定义
public sealed class UserInfoStore(IAccountService accountService) : IUserStore<VmUserInfo>
- sealed: 密封类,不能被继承
- 主构造函数: 使用 C# 12 的主构造函数语法,注入
IAccountService依赖 - 实现接口:
IUserStore<VmUserInfo>- ASP.NET Core Identity 的核心用户存储接口
主要功能
1. 用户属性访问方法
| 方法 | 功能 |
|---|---|
GetUserIdAsync | 获取用户 ID |
GetUserNameAsync | 获取用户名 |
SetUserNameAsync | 设置用户名(含空值检查) |
GetNormalizedUserNameAsync | 获取规范化用户名 |
SetNormalizedUserNameAsync | 设置规范化用户名(含空值检查) |
2. CRUD 操作
CreateAsync, UpdateAsync, DeleteAsync
这三个方法都抛出 NotImplementedException,表示未实现增删改功能,只支持查询。
3. 查询方法
- FindByIdAsync: 通过用户 ID 查找用户,委托给
accountService.GetOneUserAsync - FindByNameAsync: 通过用户名查找用户,委托给
accountService.GetUserInfoByNameAsync
设计特点
- 只读存储: 只实现了查询功能,不支持创建/更新/删除
- 委托模式: 实际业务逻辑委托给注入的
IAccountService - 异步包装: 使用
Task.Run包装同步操作(虽然对于简单属性访问可能不必要) - 参数验证: 对可空参数使用
ArgumentNullException.ThrowIfNull进行验证
适用场景
适合只读认证场景,例如:
- 用户数据由外部系统管理
- 仅需要身份验证,不需要用户注册功能
- 与现有账户系统集成
AI 正在分析代码…
评论加载中...