HttpRuntime.Cache 等同于 asp.net 5,MVC 6
HttpRuntime.Cache Equivalent for asp.net 5, MVC 6
所以我刚刚从 ASP.Net 4 移动到 ASP.Net 5。我现在正在尝试更改一个项目,以便它在新的 ASP.Net 中工作,但当然将会有很多错误。
有谁知道 HttpRuntime 的等效扩展是什么,因为我似乎无法在任何地方找到它。我正在使用缓存对象客户端。
HttpRuntime.Cache[Findqs.QuestionSetName]
'Findqs'只是一般对象
您可以 IMemoryCache
实现缓存数据。这有不同的实现,包括内存缓存、redis、sql 服务器缓存等。
快速简单的实施过程如下
更新您的 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 class,通过在ConfigureServices
方法中调用services.AddCaching()
扩展方法启用缓存。
public void ConfigureServices(IServiceCollection services)
{
services.AddCaching();
services.AddMvc();
}
现在您可以通过构造函数注入将 IMemoryCache
注入您的 class。该框架将为您解析一个具体的实现并将其注入您的 class 构造函数。
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();
}
}
理想情况下,您不希望在控制器中混合缓存。您可以将其移动到另一个 class/layer 以保持所有内容的可读性和可维护性。您仍然可以在那里进行构造函数注入。
官方asp.netmvcrepo有更多样例供大家参考
我的回答集中在“有谁知道 HttpRuntime 的等效扩展是什么,因为我似乎无法在任何地方找到它”
您标记了两个不同的框架(.net 和 .net core),它们有两个完全不同的缓存 implementations/solutions。下面第一个就是你要找的那个:
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);
}
}
所以我刚刚从 ASP.Net 4 移动到 ASP.Net 5。我现在正在尝试更改一个项目,以便它在新的 ASP.Net 中工作,但当然将会有很多错误。
有谁知道 HttpRuntime 的等效扩展是什么,因为我似乎无法在任何地方找到它。我正在使用缓存对象客户端。
HttpRuntime.Cache[Findqs.QuestionSetName]
'Findqs'只是一般对象
您可以 IMemoryCache
实现缓存数据。这有不同的实现,包括内存缓存、redis、sql 服务器缓存等。
快速简单的实施过程如下
更新您的 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 class,通过在ConfigureServices
方法中调用services.AddCaching()
扩展方法启用缓存。
public void ConfigureServices(IServiceCollection services)
{
services.AddCaching();
services.AddMvc();
}
现在您可以通过构造函数注入将 IMemoryCache
注入您的 class。该框架将为您解析一个具体的实现并将其注入您的 class 构造函数。
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();
}
}
理想情况下,您不希望在控制器中混合缓存。您可以将其移动到另一个 class/layer 以保持所有内容的可读性和可维护性。您仍然可以在那里进行构造函数注入。
官方asp.netmvcrepo有更多样例供大家参考
我的回答集中在“有谁知道 HttpRuntime 的等效扩展是什么,因为我似乎无法在任何地方找到它”
您标记了两个不同的框架(.net 和 .net core),它们有两个完全不同的缓存 implementations/solutions。下面第一个就是你要找的那个:
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);
}
}