我正在从.NET 4.6直到.NET Core移植一些代码,并且遇到了MemoryCache的一些问题。 4.6代码使用MemoryCache.Default来实例化缓存,但这似乎在.NET Core中不可用。在.NET Core中是否有相同的内容,或者我是否应该将我自己的MemoryCache作为单例创建并通过IOC注入它?
答案 0 :(得分:7)
通常你会使用单身IMemoryCache
IServiceProvider ConfigureServices(IServiceCollection services){
...
services.AddMemoryCache();
...
}
但您也可以创建缓存
mycache = new MemoryCache(memoryCacheOptions)
如果你需要做一些更复杂的事情
memoryCacheOptions
可以注入IOptions<MemoryCacheOptions>
,您可以使用
myCustomMemoryCache = new MemoryCache(memoryCacheOptions);
答案 1 :(得分:1)
System.Runtime.Caching.MemoryCache和Microsoft.Extensions.Caching.Memory.MemoryCache 是完全不同的实现。
它们相似,但是具有不同的问题/缺陷。
System.Runtime.Caching.MemoryCache是较旧的版本(4.6),基于ObjectCache,通常通过您所述的MemoryCache.Default使用。实际上,可以通过.Net标准格式的NuGet库在.Net Core中使用它。 https://www.nuget.org/packages/System.Runtime.Caching/
Microsoft.Extensions.Caching.Memory.MemoryCache是新的.NET核心版本,通常在更新的ASP核心应用程序中使用。它实现了IMemoryCache,通常由@Bogdan
如上所述添加到服务中https://github.com/aspnet/Extensions/blob/master/src/Caching/Memory/src/MemoryCache.cs https://www.nuget.org/packages/Microsoft.Extensions.Caching.Memory/