繁体   English   中英

Asp.Net Core:在控制器外使用内存缓存

[英]Asp.Net Core: Use memory cache outside controller

在 ASP.NET Core 中,从控制器访问内存缓存非常容易

在您的启动中,您添加:

public void ConfigureServices(IServiceCollection services)
        {
             services.AddMemoryCache();
        }

然后从您的控制器

[Route("api/[controller]")]
public class MyExampleController : Controller
{
    private IMemoryCache _cache;

    public MyExampleController(IMemoryCache memoryCache)
    {
        _cache = memoryCache;
    }

    [HttpGet("{id}", Name = "DoStuff")]
    public string Get(string id)
    {
        var cacheEntryOptions = new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(1));
        _cache.Set("key", "value", cacheEntryOptions);
    }
}

但是,如何在控制器之外访问相同的内存缓存。 例如。 我有一个由 HangFire 启动的计划任务,如何从通过 HangFire 计划任务启动的代码中访问内存缓存?

public class ScheduledStuff
{
    public void RunScheduledTasks()
    {
        //want to access the same memorycache here ...
    }
}

内存缓存实例可以注入到任何由 DI 容器控制的组件中; 这意味着您需要在ConfigureServices方法中配置ScheduledStuff实例:

public void ConfigureServices(IServiceCollection services) {
  services.AddMemoryCache();
  services.AddSingleton<ScheduledStuff>();
}

并在 ScheduledStuff 构造函数中将 IMemoryCache 声明为依赖项:

public class ScheduledStuff {
  IMemoryCache MemCache;
  public ScheduledStuff(IMemoryCache memCache) {
    MemCache = memCache;
  }
}

我在这里有点晚了,但只是想补充一点以节省某人的时间。 您可以在应用程序的任何位置通过 HttpContext 访问 IMemoryCache

var cache = HttpContext.RequestServices.GetService<IMemoryCache>();

请确保在启动时添加 MemeoryCache

services.AddMemoryCache();

还有另一种非常灵活和简单的方法是使用System.Runtime.Caching/MemoryCache

System.Runtime.Caching/MemoryCache:
这与过去的 ASP.Net MVC 的HttpRuntime.Cache几乎相同。 您可以在 ASP.Net CORE 上使用它,而无需任何依赖注入,在您想要的任何类中。 这是如何使用它:

// First install 'System.Runtime.Caching' (NuGet package)

// Add a using
using System.Runtime.Caching;

// To get a value
var myString = MemoryCache.Default["itemCacheKey"];

// To store a value
MemoryCache.Default["itemCacheKey"] = myString;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM