В webmethods очень просто реализовать кэширование путем аннотирования [WebMethod (CacheDuration...] атрибут. Мы можем создать что-то подобное для non-webmethods, такого как Статические методы?
Любая справка/подсказка ценится.
Нет встроенной функции для достижения именно того, что вы хотите. Вы должны использовать Httpruntime.Cache
.
Это не встроенная функция, но вы можете добиться чего-то подобного, используя аспектно-ориентированное программирование (АОП). Кэширование информации с использованием аспектов.
Если вам интересно, Spring.NET предоставляет AOP
Посмотрите эту простую реализацию атрибута для кэширования с помощью Post Sharp.
Если вы не можете использовать AOP для выполнения работы, вы можете попробовать использовать этот небольшой класс, который я собрал вместе.
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;
}
}