using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
public static void Main()
static void UsingExample()
Console.WriteLine(">> Using Example\n");
IMemoryCache cache = new MemoryCache(Options.Create<MemoryCacheOptions>(new MemoryCacheOptions()));
using (var parent = cache.CreateEntry("parent"))
parent.Value = "parent value";
parent.AbsoluteExpiration = DateTime.Now.AddHours(4);
using (var child = cache.CreateEntry("child"))
child.Value = "child value";
child.AbsoluteExpiration = DateTime.Now.AddMinutes(1);
parent.AbsoluteExpiration.Dump("parent expiration before child dispose");
child.AbsoluteExpiration.Dump("child expiration");
parent.AbsoluteExpiration.Dump("parent expiration after child dispose");
static void CacheExample()
Console.WriteLine(">> Cache Example\n");
IMemoryCache cache = new MemoryCache(Options.Create<MemoryCacheOptions>(new MemoryCacheOptions()));
static string OuterCache(IMemoryCache cache)
return cache.GetOrCreate("outer", c => {
c.AbsoluteExpiration = DateTime.Now.AddHours(4);
c.AbsoluteExpiration.Dump("GetOrCreate expiration before inner");
string result = InnerCache(cache, c);
c.AbsoluteExpiration.Dump("GetOrCreate expiration after inner");
static string InnerCache(IMemoryCache cache, ICacheEntry e)
if (cache.TryGetValue<string>("inner", out var s))
return cache.Set("inner", "foo", DateTime.Now.AddSeconds(1));
public static void Dump(this object o, string d)
Console.WriteLine("// " + d);
Console.WriteLine(o.ToString());