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

在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(); } 

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

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