В ASP.NET Ядра его очень легко получить доступ к кэш-памяти из контроллера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 ...
}
}
Спасибо за вашу помощь Виталию. Проблема в том, как я могу запустить метод RunScheduledTasks? Он требует параметра memoryCache. Ошибка \t \t CS7036 Там не аргумент, учитывая, что соответствует требуемому формальному параметру 'MemoryCache' из 'ScheduledStuff.ScheduledStuff (IMemoryCache)' 'ScheduledStuff scheduledStuff = новый ScheduledStuff();' <- Ошибка здесь 'scheduledStuff.RunScheduledTasks (); ' – SpeedBird527
вам не следует создавать экземпляр' SheduledStuff' в вашем коде, вместо этого вам нужно получить его из контейнера DI, указав его как зависимость в контроллере или с помощью HttpContext.RequestServices'. –