【问题标题】:How to make IMemoryCache available in all controllers?如何使 IMemoryCache 在所有控制器中可用?
【发布时间】:2019-11-21 11:03:56
【问题描述】:

我已经按照这个教程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);
    }
}

它给出了以下错误 -

当前上下文中不存在名称“_cache”(CS0103)

如何使它 _cache 对所有控制器可用?

【问题讨论】:

    标签: asp.net-mvc asp.net-core caching asp.net-core-mvc asp.net-core-2.0


    【解决方案1】:

    首先你需要定义一些使用IMemoryCache的基本控制器类

    public abstract class MyBaseController : ControllerBase
    {
        public IConfiguration Configuration { get; }
        protected IMemoryCache _memoryCache;
    
        public MyBaseController(IConfiguration configuration, IMemoryCache memoryCache)
        {
            Configuration = configuration;
            _memoryCache = memoryCache;
        }
    }
    

    然后从它继承你的控制器,不要忘记调用基类构造函数来实例化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();
        }
    }
    

    【讨论】:

    • 它给了我错误There is no argument given that corresponds to the required formal parameter 'memoryCache' of 'TokensController.TokensController(IMemoryCache)' (CS7036)
    • @JKLM 你能分享TokensController的代码吗?通过pastebinscreenshot
    • @JKLM 不幸的是,我看不到您在代码中使用我的答案的位置
    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2011-02-16
    • 2018-09-24
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多