Asp.Net核心:在控制器外使用内存缓存
Asp.Net Core: Use memory cache outside controller
在 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<ScheduledStuff>();
}
并在 ScheduledStuff 构造函数中将 IMemoryCache 声明为依赖项:
public class ScheduledStuff {
IMemoryCache MemCache;
public ScheduledStuff(IMemoryCache memCache) {
MemCache = memCache;
}
}
我来晚了,只是想补充一点以节省别人的时间。您可以在应用程序的任何位置通过 HttpContext 访问 IMemoryCache
var cache = HttpContext.RequestServices.GetService<IMemoryCache>();
请确保在启动中添加 MemeoryCache
services.AddMemoryCache();
还有另一种非常灵活和简单的方法是使用 System.Runtime.Caching/MemoryCache
System.Runtime.Caching/MemoryCache:
这与过去 ASP.Net MVC 的 HttpRuntime.Cache
几乎相同。 您可以在 ASP.Net CORE 上使用它而无需任何依赖项注入,在您想要的任何 class 中。这是如何使用它:
// 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;
在 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<ScheduledStuff>();
}
并在 ScheduledStuff 构造函数中将 IMemoryCache 声明为依赖项:
public class ScheduledStuff {
IMemoryCache MemCache;
public ScheduledStuff(IMemoryCache memCache) {
MemCache = memCache;
}
}
我来晚了,只是想补充一点以节省别人的时间。您可以在应用程序的任何位置通过 HttpContext 访问 IMemoryCache
var cache = HttpContext.RequestServices.GetService<IMemoryCache>();
请确保在启动中添加 MemeoryCache
services.AddMemoryCache();
还有另一种非常灵活和简单的方法是使用 System.Runtime.Caching/MemoryCache
System.Runtime.Caching/MemoryCache:
这与过去 ASP.Net MVC 的 HttpRuntime.Cache
几乎相同。 您可以在 ASP.Net CORE 上使用它而无需任何依赖项注入,在您想要的任何 class 中。这是如何使用它:
// 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;