Я переношу некоторый код из .NET 4.6 с .NET Core и столкнулся с некоторыми проблемами с MemoryCache. Код 4.6 использует MemoryCache.Default для создания экземпляра кеша, но это, похоже, не доступно в .NET Core. Есть ли какой-либо эквивалент этому в .NET Core или я должен скорее создать собственный MemoryCache в качестве одноэлементного кода и ввести его через IOC?
MemoryCache.Default недоступен в .NET Core?
Ответ 1
Обычно вы используете синглтон IMemoryCache
IServiceProvider ConfigureServices(IServiceCollection services){
...
services.AddMemoryCache();
...
}
но вы также можете создать кеш
mycache = new MemoryCache(memoryCacheOptions)
Если вам нужно сделать более сложные вещи
memoryCacheOptions
можно вводить через - IOptions<MemoryCacheOptions>
, и вы можете использовать его
myCustomMemoryCache = new MemoryCache(memoryCacheOptions);
https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory
Ответ 2
System.Runtime.Caching.MemoryCache и Microsoft.Extensions.Caching.Memory.MemoryCache - это абсолютно разные реализации.
Они похожи, но имеют разные наборы проблем/предостережений.
System.Runtime.Caching.MemoryCache является более старой версией (4.6) и основана на ObjectCache и обычно используется через MemoryCache.Default, как вы описали. На самом деле его можно использовать в .Net Core через библиотеку NuGet в стандартном формате .Net. 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/