I have an abstraction over the MemoryCache
, this instance uses AbsoluteExpiration
for its CacheItemPolicy
and is managed by Autofac as follows:
builder
.RegisterType<MyCache>()
.As<IMyCache>()
.SingleInstance()
.WithParameter("cacheName", "MyCache");
Theoretically I want the items to expire absolutely (e.g. in 15 minutes).
The problem (question) is, that it's a single instance over all request and no mechanism in place that resets the expiration to 15 minutes in the future again. So the refresh would only happen a single time, right?
What's the solution for this? Do I need to hook into an event or something...?
My problem was that I need to specify a certain point in time where the cache key expires:
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(15)
The cache policy was being set in a private readonly field
which only gets initialized when creating an instance of MyCache
, but this only happens on application startup (IoC container, single instance).
This works for me now:
private CacheItemPolicy CachePolicy => new CacheItemPolicy
{
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(15)
};
Everytime the cache item policy is accessed, a new DateTimeOffset
is calculated.