gpt4 book ai didi

c# - 在 .net core 2.0 的类库中创建全局缓存

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:25 31 4
gpt4 key购买 nike

我有 .net core 2.0 Web Api 项目。我有 10 个 Web Api 和一个类库项目。我想缓存一些数据。所以我在类库中创建了 CacheHelper.cs。我在 web api 项目中注入(inject) Startup.cs。我想在 webapi 项目启动并到达我的 Controller 中的任何位置时调用 SetCommonCacheItems。但是当我调用 GetCities 函数时,返回 null。有什么问题?

CacheHelper.cs(在类库项目中)

public class CacheHelper : ICacheHelper
{
private readonly IUnitOfWork unitOfWork;

MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
public CacheHelper(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}

public void SetCommonCacheItems()
{
var cities= unitOfWork.CityRepo.GetAll();
cache.Set("city", cities);
}

public string GetCities()
{
string obj;
cache.TryGetValue<string>("city", out obj);

return obj;
}
}

Startup.cs(在 Web API 项目中)

 public void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddScoped<IJwtHelper, JwtHelper>();
services.AddScoped<IAuditHelper, AuditHelper>();
services.AddMemoryCache();
services.AddScoped<ICacheHelper, CacheHelper>();
services.AddMvc();

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}

最佳答案

那是因为您将缓存用作“范围内”服务,这意味着对于每个请求,框架都会创建一个新的缓存对象,而您在应用启动时设置的缓存对象将会丢失。

试试这个:

services.AddSingleton<ICacheHelper, CacheHelper>();

重要提示:这会破坏您的工作单元,因为它在您的缓存中也是一个单例。

我建议不要在缓存中使用工作单元,而只是将存储库中的结果作为参数传递给 SetCommonCacheItems()。

编辑:或者您可以使用 built-in memory cache .在这种情况下,您不必将缓存助手用作单例。

关于c# - 在 .net core 2.0 的类库中创建全局缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52975278/

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