gpt4 book ai didi

c# - UserManager 有缓存吗?

转载 作者:行者123 更新时间:2023-12-05 03:01:56 26 4
gpt4 key购买 nike

我有一个应用程序使用 Microsoft.AspNetCore.Identity.UserManager 来管理用户。我使用核心 2.2。 UserManager 是通过我的服务中的内置依赖项注入(inject)(不是我自己)注入(inject)的。像这样:

public MyService(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}

当我第一次尝试通过 Id (FindByIdAsync) 获取用户时,我在控制台中看到了对数据库的请求。具有相同 ID 的下一个请求我没有看到对数据库的任何请求,但应用程序可以正常工作并获得用户。

在 Startup.cs 中,我没有 userManager 的配置。我只是使用扩展方法:

public void ConfigureServices(IServiceCollection services)
{
services
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("MyConnectionString"));
services
.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
services.AddMvc();
var configService = new ConfigurationService(Configuration);
services
.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(configService.GetApiResources())
.AddInMemoryClients(configService.GetClients())
.AddTestUsers(configService.GetUsers());
}

问题:也许有一种方法可以在 UserManager 中配置此缓存功能?指出从何处获取有关此缓存保留多长时间的信息。

最佳答案

我在 Github 上挖掘了 Identity 源代码并以 UserStore 结尾:

public override Task<TUser> FindByIdAsync(string userId, CancellationToken cancellationToken = default(CancellationToken))
{
cancellationToken.ThrowIfCancellationRequested();
ThrowIfDisposed();
var id = ConvertIdFromString(userId);
return UsersSet.FindAsync(new object[] { id }, cancellationToken);
}

UsersSet蜜蜂类型DbSet<TUser> , Identity 无法直接管理缓存,而是依赖于 EF 内部。

深入研究 EF 源代码,我以 DbContext 结尾:

object IDbSetCache.GetOrAddSet(IDbSetSource source, Type type)
{
CheckDisposed();

if (_sets == null)
{
_sets = new Dictionary<Type, object>();
}

if (!_sets.TryGetValue(type, out var set))
{
set = source.Create(this, type);
_sets[type] = set;
}

return set;
}

而且看起来有一个由简单明了的 Dictionary 支持的缓存机制。 .

然而,正如 Matt G. 在他的评论中指出的那样,管理缓存的解决方案位于您的服务之上:它与您在注入(inject) UserManager 时如何管理依赖范围有关。 .

关于c# - UserManager<IdentityUser> 有缓存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55359343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com