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; } }