Asp.Net Core: usar memoria caché fuera del controlador

En ASP.NET Core es muy fácil acceder a su memoria caché desde un controlador

En tu startup agregas:

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

y luego desde su controlador

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

Pero, ¿cómo puedo acceder a la misma memoria caché fuera del controlador? p.ej. Tengo una tarea progtwigda que se inicia con HangFire. ¿Cómo accedo al caché de memoria desde mi código que comienza a través de la tarea progtwigda de HangFire?

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

La instancia de memoria caché se puede inyectar en cualquier componente controlado por el contenedor DI; esto significa que necesita configurar la instancia de ScheduledStuff en el método ConfigureServices :

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

y declare IMemoryCache como dependencia en el constructor de ScheduledStuff:

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