Si no puede utilizar AOP para conseguir el trabajo hecho esto se podría tratar de usar esta pequeña clase I en su conjunto.
public MyClass CachedInstance
{
get { return _cachedInstance.Value; }
}
private static readonly Cached<MyClass> _cachedInstance = new Cached<MyClass>(() => new MyClass(), TimeSpan.FromMinutes(15));
public sealed class Cached<T>
{
private readonly Func<T> _createValue;
private readonly TimeSpan _cacheFor;
private DateTime _createdAt;
private T _value;
public T Value
{
get
{
if (_createdAt == DateTime.MinValue || DateTime.Now - _createdAt > _cacheFor)
{
lock (this)
{
if (_createdAt == DateTime.MinValue || DateTime.Now - _createdAt > _cacheFor)
{
_value = _createValue();
_createdAt = DateTime.Now;
}
}
}
return _value;
}
}
public Cached(Func<T> createValue, TimeSpan cacheFor)
{
if (createValue == null)
{
throw new ArgumentNullException("createValue");
}
_createValue = createValue;
_cacheFor = cacheFor;
}
}
Tengo curiosidad de por qué. No creo que sea posible. –
Alastair, la razón es porque no quiero dejar mi implementación de caché en todos lados en mis métodos. En segundo lugar, tengo un montón de métodos estáticos (sin miembros estáticos o contexto) por lo que tener el caché implementado para cada uno consume mucho tiempo y es complicado. Supongo que solo estoy buscando una manera fácil. ¡Y la Programación Orientada a los Aspectos ayudará con seguridad! Gracias a todos. –
@SP. ¿Encontraste alguna solución declarativa para atrapar? – Kuncevic