Nuestros mejores desarrolladores agotaron sus depósitos de café, por su búsqueda noche y día por la respuesta, hasta que Alexandría encontró el arreglo en GitLab y en este momento la compartimos contigo.
Solución:
Después de configurar el proveedor, recupere el caché a través del GetService
método de extensión
var provider = new ServiceCollection()
.AddMemoryCache()
.BuildServiceProvider();
//And now?
var cache = provider.GetService();
//...other code removed for brevity;
De los comentarios:
No es necesario usar la inyección de dependencia, lo único que se necesitaba era desechar el valor de retorno de CreateEntry(). La entrada devuelta por
CreateEntry
necesita ser desechado. Al desecharlo, se agrega a la memoria caché:
using (var entry = cache.CreateEntry("item2"))
entry.Value = 2;
entry.AbsoluteExpiration = DateTime.UtcNow.AddDays(1);
IMemoryCache cache = new MemoryCache(new MemoryCacheOptions());
object result = cache.Set("Key", new object());
bool found = cache.TryGetValue("Key", out result);
Vea el ejemplo completo de caché de memoria en GitHub.
Debe agregar paquetes NuGet Microsoft.Extensions.Caching.Memory en su proyecto para usar MemoryCache
Aquí está el código completo de la aplicación de consola en .NET Core
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Primitives;
using System;
using System.Threading;
namespace InMemoryNetCore
class Program
static void Main(string[] args)
IMemoryCache cache = new MemoryCache(new MemoryCacheOptions());
object result;
string key = "KeyName";
// Create / Overwrite
result = cache.Set(key, "Testing 1");
result = cache.Set(key, "Update 1");
// Retrieve, null if not found
result = cache.Get(key);
Console.WriteLine("Output of KeyName Value="+result);
// Check if Exists
bool found = cache.TryGetValue(key, out result);
Console.WriteLine("KeyName Found=" + result);
// Delete item
cache.Remove(key);
//set item with token expiration and callback
TimeSpan expirationMinutes = System.TimeSpan.FromSeconds(0.1);
var expirationTime = DateTime.Now.Add(expirationMinutes);
var expirationToken = new CancellationChangeToken(
new CancellationTokenSource(TimeSpan.FromMinutes(0.001)).Token);
// Create cache item which executes call back function
var cacheEntryOptions = new MemoryCacheEntryOptions()
// Pin to cache.
.SetPriority(Microsoft.Extensions.Caching.Memory.CacheItemPriority.Normal)
// Set the actual expiration time
.SetAbsoluteExpiration(expirationTime)
// Force eviction to run
.AddExpirationToken(expirationToken)
// Add eviction callback
.RegisterPostEvictionCallback(callback: CacheItemRemoved);
//add cache Item with options of callback
result = cache.Set(key,"Call back cache Item", cacheEntryOptions);
Console.WriteLine(result);
Console.ReadKey();
private static void CacheItemRemoved(object key, object value, EvictionReason reason, object state)
Console.WriteLine(key + " " + value + " removed from cache due to:" + reason);
Fuente: en caché de memoria C# (Explicación con ejemplo en .NET y .NET Core)
Finalizando este artículo puedes encontrar las observaciones de otros sys admins, tú incluso eres capaz dejar el tuyo si lo crees conveniente.