Я создал универсальную оболочку для использования объекта Cache:
public class Cache<T> where T : class
{
public Cache Cache {get;set;}
public CachedKeys Key {get;set;}
public Cache(Cache cache, CachedKeys key){
Cache = cache;
Key = key;
}
public void AddToCache(T obj){
Cache.Add(Key.ToString(),
obj,
null,
DateTime.Now.AddMinutes(5),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal,
null);
}
public bool TryGetFromCache(out T cachedData) {
cachedData = Cache[Key.ToString()] as T;
return cachedData != null;
}
public void RemoveFromCache() {
Cache.Remove(Key.ToString()); }
}
Перечисление CachedKeys - это просто список ключей, которые можно использовать для кэширования данных.
Проблемаэто, чтобы вызвать это вполне конвульсивно:
var cache = new Cache<MyObject>(Page.Cache, CachedKeys.MyKey);
MyObject myObject = null;
if(!cache.TryGetFromCache(out myObject)){
//get data...
cache.AddToCache(data); //add to cache
return data;
}
return myObject;
Я храню только один экземпляр каждого из моих объектов в кэше.
Следовательно, есть ли способчто я могу создать метод расширения, который принимает тип объекта для Cache и использует (через Reflection) его Name
в качестве ключа кэша?
public static Cache<T> GetCache(this Cache cache, Type cacheType){
Cache<cacheType> Cache = new Cache<cacheType>(cache, cacheType.Name);
}
Конечно, здесь есть две ошибки:
- Методы расширения должны быть определены в неуниверсальном статическом классе
- Не удалось найти имя типа или пространства имен 'cacheType'
Это явно неправильный подход, но я думал, что покажу свою работу.Может ли кто-нибудь направить меня в правильном направлении?