У класса DBConnector существует обобщенный экземплярный метод GetCachedEntity.
public T GetCachedEntity<T>(string key, Func<T> fillAction) public T GetCachedEntity<T>(string key, Func<string, T> fillAction) public T GetCachedEntity<T>(string key, double cacheInterval, Func<T> fillAction) public T GetCachedEntity<T>(string key, double cacheInterval, Func<string, T> fillAction)
Данный метод позволяет кэшировать произвольные объекты ссылочных типов (можно даже кэшировать null-значения). Если мы хотим закэшировать коллекцию объектов, полученных с помощью LINQ-to-SQL, ее сначала нужно сделать вещественной с помощью любого из методов: ToList, ToArray или ToDictionary. Для того, чтобы кэшировать значимый тип (value type), необоходимо выполнить принудительный boxing (число можно для этого, например, преобразовать в строку).
Пример использования:
DBConnector cnn = new DBConnector(); List<Banner> banners = cnn.GetCachedEntity<List<Banner>>(pageAddress, 10, GetPageBanners);
Где GetPageBanners – метод, возвращающий List<Banner>, который будет вызван только при заполнении кэша. Метод может быть определен как без параметров, так и с единственным строковым параметром. Во втором случае в метод будет передано значение ключа (параметр key).
Discussion