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

时间:2017-02-05 07:28:29

标签: c# asp.net asp.net-core .net-core memorycache

在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 ...
    }
}

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

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

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

请确保在“启动”中添加MemeoryCache

services.AddMemoryCache();

答案 2 :(得分:0)

还有另一种非常灵活和容易的方法是使用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;