asp.net 5和MVC 6的HttpRuntime.Cache等价物是什么?

11

所以,我刚从ASP.Net 4转移到了ASP.Net 5。目前,我正在尝试更改一个项目,使其在新的ASP.Net中运行,但当然会出现很多错误。

有没有人知道HttpRuntime的等效扩展是什么,因为我似乎找不到它。我正在使用它来将一个对象缓存到客户端。

HttpRuntime.Cache[Findqs.QuestionSetName] 

'Findqs'只是一个普通的对象


请查看 ASP 文档中的内存缓存。对于分布式缓存,文档仍未完善。您可以在新的 asp 5 缓存存储库示例 中找到一些有用的内容。 - Daniel J.G.
1
被接受的答案展示了另一种实现方式,但是我刚刚发布了一种完全按照你要求的方式来实现它。换句话说,在asp.net core中可以使用类似于HttpRuntime.Cache["key"]的等效方法,而我的回答展示了如何实现。 - Vitox
2个回答

13
您可以使用IMemoryCache实现来缓存数据。这包括不同的实现,如内存缓存、redis、SQL Server缓存等。
快速而简单的实现方法如下:
更新您的project.json文件,并在dependencies部分下添加以下2个项目。
"Microsoft.Extensions.Caching.Abstractions": "1.0.0-rc1-final",
"Microsoft.Extensions.Caching.Memory": "1.0.0-rc1-final"

保存此文件将执行 dnu 恢复操作,并将所需的程序集添加到您的项目中。
在 Startup.cs 类中,通过在 ConfigureServices 方法中调用 services.AddCaching() 扩展方法来启用缓存。
public void ConfigureServices(IServiceCollection services)
{
    services.AddCaching();
    services.AddMvc();
}

现在你可以通过构造函数注入的方式注入IMemoryCache到你的类中。框架会为你解析一个具体的实现并将其注入到你的类构造函数中。
public class HomeController : Controller
{
    IMemoryCache memoryCache;
    public HomeController(IMemoryCache memoryCache)
    {
        this.memoryCache = memoryCache;
    }
    public IActionResult Index()
    {   
        var existingBadUsers = new List<int>();
        var cacheKey = "BadUsers";
        List<int> badUserIds = new List<int> { 5, 7, 8, 34 };
        if(memoryCache.TryGetValue(cacheKey, out existingBadUsers))
        {
            var cachedUserIds = existingBadUsers;
        }
        else
        {
            memoryCache.Set(cacheKey, badUserIds);
        }
        return View();
    }
} 

理想情况下,您不希望在控制器中混合缓存。您可以将其移动到另一个类/层中以保持所有内容的可读性和可维护性。您仍然可以在那里进行构造函数注入。

官方 asp.net mvc repo 有更多示例供您参考。


1
太棒了!谢谢。 - Alex Grogan

11

我的回答重点关注于“有人知道HttpRuntime的等效扩展是什么,因为我似乎找不到它”。


你标记了两个不同的框架(.net和.net core),它们有两个完全不同的缓存实现/解决方案。下面是你要找的第一个:

1 - System.Runtime.Caching/MemoryCache
2 - Microsoft.Extensions.Caching.Memory/IMemoryCache


System.Runtime.Caching/MemoryCache:
这与旧版ASP.Net MVC的HttpRuntime.Cache基本相同。你可以在ASP.Net CORE上使用它而无需进行任何依赖注入。以下是如何使用它:

// 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;

Microsoft.Extensions.Caching.Memory
这个库紧密地与依赖注入相关,是在ASP.Net CORE中实现缓存的推荐方式之一。以下是其中一种实现方式:

// In asp.net core's Startup add this:
public void ConfigureServices(IServiceCollection services)
{
    services.AddMemoryCache();
}

在控制器上使用它:

// Add a using
using Microsoft.Extensions.Caching.Memory;

// In your controller's constructor, you add the dependency on the 'IMemoryCache'
public class HomeController : Controller
{
    private IMemoryCache _cache;
    public HomeController(IMemoryCache memoryCache)
    {
        _cache = memoryCache;
    }

    public void Test()
    {
        // To get a value
        string myString = null;
        if (_cache.TryGetValue("itemCacheKey", out myString))
        { /*  key/value found  -  myString has the key cache's value*/  }


        // To store a value
        _cache.Set("itemCacheKey", myString);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接