HttpRuntime.Cache等效于asp.net 5,MVC 6

时间:2015-12-22 10:59:57

标签: c# caching asp.net-core asp.net-core-mvc asp.net-4.5

所以我刚刚从ASP.Net 4迁移到ASP.Net 5.我现在正试图改变一个项目,以便它在新的ASP.Net中工作但当然会有一个加载错误。

有没有人知道HttpRuntime的等效扩展是什么,因为我似乎无法在任何地方找到它。我正在使用缓存对象客户端。

HttpRuntime.Cache[Findqs.QuestionSetName] 

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

2 个答案:

答案 0 :(得分:6)

您可以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类,通过调用services.AddCaching()方法中的ConfigureServices扩展方法启用缓存。

public void ConfigureServices(IServiceCollection services)
{
    services.AddCaching();
    services.AddMvc();
}

现在你可以通过构造函数注入向你的lass注入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 :(得分:1)

我的答案集中在“没有人知道HttpRuntime的等效扩展名,因为我似乎无法在任何地方找到它”


您标记了两个不同的框架(.net和.net核心),对于它们来说,有两个完全不同的缓存实现/解决方案。下面的第一个是您正在寻找的一个:

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);
    }
}