首页 / 问答 / ASP.NET Core应用程序中如何在控制器外部访问和使用内存缓存(IMemoryCache)?

ASP.NET Core应用程序中如何在控制器外部访问和使用内存缓存(IMemoryCache)?

0

在ASP.NET Core应用程序编程开发中,官方内置了基于内存的数据缓存实现,使用内存缓存也非常方便,只需要安装Microsoft.Extensions.Caching.Memory包,并在Startup.cs配置services.AddMemoryCache();即可,如:

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}")]
    public string Get(string id)
    {
        var cacheEntryOptions = new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(1));
        _cache.Set("key", "value", cacheEntryOptions);
    }
}

但如果我需要一个控制器外部的类中访问同一个缓存实例,比如在一个定时任务调度服务中访问这个内存缓存实例,应该如何实现呢?

比如:

public class ScheduledStuff
{
    public void RunScheduledTasks()
    {
        // 这里如何访问和控制器中一样的内存缓存实例呢?
    }
}
回复 [×]
提交评论
请输入评论内容

2 个回答

  • 0

    在.NET Core/ASP.NET Core应用程序中,内存缓存实例可以被注入到DI容器控制的任意组件中,只需要在Startup.cs的DI服务中注册相应的服务即可,如下:

    然后,在ScheduledStuff类中使用构造函数注入,如下:

    最后,在控制器中调用如下:

    Rector的个人主页

    Rector

    2020-01-19 回答

    • 0

      另一种方式是直接通过请求上下文访问IMemoryCache的服务实例,如下:

      这里,你只需要在Startup.cs中注册IMemoryCache的服务即可,如下:

      Rector的个人主页

      Rector

      2020-01-19 回答

      我来回答