MemoryCache.Default недоступен в .NET Core?

Я переношу некоторый код из .NET 4.6 в .NET Core и столкнулся с некоторыми проблемами с MemoryCache. Код 4.6 использует MemoryCache.Default для создания экземпляра кеша, но, похоже, это недоступно в .NET Core. Есть ли какой-либо эквивалент этому в .NET Core, или мне лучше создать свой собственный MemoryCache как синглтон и внедрить его через IOC?


person henningst    schedule 20.11.2015    source источник
comment
Дело даже не в этом, в .NETCore отсутствует все пространство имен System.Runtime.Caching. Вот как это должно быть ядром, вы когда-либо получаете компактную версию .NET, только удаляя вещи. Множество альтернатив доступно на Nuget.org   -  person Hans Passant    schedule 20.11.2015
comment
Да, но существует другая реализация MemoryCache в .NET Core, расположенная в Microsoft.Framework.Caching.Memory. Я переписал код для использования этой реализации, но он не имеет точно такого же API, а свойство MemoryCache.Default не существует. Думаю, мне просто придется свернуть свой собственный :)   -  person henningst    schedule 20.11.2015


Ответы (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/

person Menace    schedule 09.04.2019

Как правило, вы должны использовать синглтон 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

person Bogdan    schedule 02.09.2016
comment
Я предполагаю, что вы имеете в виду services.AddMemoryCache(); относительно синглтона IMemoryCache? - person user247702; 10.07.2018
comment
yes =› IServiceProvider ConfigureServices(службы IServiceCollection){ services.AddMemoryCache(); } - person Bogdan; 10.07.2018