如何使 IMemoryCache 在所有控制器中可用?
How to make IMemoryCache available in all controllers?
我已经学习了这个教程https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-2.2
它正在使用依赖注入使 IMemoryCache
仅在特定控制器中可用,例如
public class TController : ControllerBase
{
public IConfiguration Configuration { get; }
private IMemoryCache _cache;
public TController(IConfiguration configuration, IMemoryCache memoryCache)
{
Configuration = configuration;
_cache = memoryCache;
}
public IActionResult GetAccessToken()
{
string key ="IDGKey";
string obj;
if (!cache.TryGetValue<string>(key, out obj))
{
obj = DateTime.Now.ToString();
_cache.Set<string>(key, obj);
}
return obj;
}
}
现在,如果我尝试访问同一命名空间或不同控制器中的 _cache
值
public class RController : ControllerBase
{
public IActionResult R()
{
var cb = _cache.Get("IDGKey");
return Ok(cb);
}
}
出现以下错误 -
The name '_cache' does not exist in the current context (CS0103)
如何让它对所有控制器都可用_cache?
首先你需要定义一些使用IMemoryCache
的基础控制器class
public abstract class MyBaseController : ControllerBase
{
public IConfiguration Configuration { get; }
protected IMemoryCache _memoryCache;
public MyBaseController(IConfiguration configuration, IMemoryCache memoryCache)
{
Configuration = configuration;
_memoryCache = memoryCache;
}
}
然后从它继承你的控制器并且不要忘记调用基础 class 构造函数来实例化 IMemoryCache
public class MyController : MyBaseController
{
public MyController(IConfiguration configuration, IMemoryCache memoryCache): base(configuration, memoryCache)
{
}
public IActionResult Action()
{
var value = _memoryCache.Get("some key");
return Ok();
}
}
我已经学习了这个教程https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-2.2
它正在使用依赖注入使 IMemoryCache
仅在特定控制器中可用,例如
public class TController : ControllerBase
{
public IConfiguration Configuration { get; }
private IMemoryCache _cache;
public TController(IConfiguration configuration, IMemoryCache memoryCache)
{
Configuration = configuration;
_cache = memoryCache;
}
public IActionResult GetAccessToken()
{
string key ="IDGKey";
string obj;
if (!cache.TryGetValue<string>(key, out obj))
{
obj = DateTime.Now.ToString();
_cache.Set<string>(key, obj);
}
return obj;
}
}
现在,如果我尝试访问同一命名空间或不同控制器中的 _cache
值
public class RController : ControllerBase
{
public IActionResult R()
{
var cb = _cache.Get("IDGKey");
return Ok(cb);
}
}
出现以下错误 -
The name '_cache' does not exist in the current context (CS0103)
如何让它对所有控制器都可用_cache?
首先你需要定义一些使用IMemoryCache
public abstract class MyBaseController : ControllerBase
{
public IConfiguration Configuration { get; }
protected IMemoryCache _memoryCache;
public MyBaseController(IConfiguration configuration, IMemoryCache memoryCache)
{
Configuration = configuration;
_memoryCache = memoryCache;
}
}
然后从它继承你的控制器并且不要忘记调用基础 class 构造函数来实例化 IMemoryCache
public class MyController : MyBaseController
{
public MyController(IConfiguration configuration, IMemoryCache memoryCache): base(configuration, memoryCache)
{
}
public IActionResult Action()
{
var value = _memoryCache.Get("some key");
return Ok();
}
}