В C # возможно ли украсить метод аннотацией для заполнения объекта кэша возвращаемым значением метода?
В настоящее время я использую следующий класс для кэширования объектов данных:
public class SiteCache
{
// 7 days + 6 hours (offset to avoid repeats peak time)
private const int KeepForHours = 174;
public static void Set(string cacheKey, Object o)
{
if (o != null)
HttpContext.Current.Cache.Insert(cacheKey, o, null, DateTime.Now.AddHours(KeepForHours), TimeSpan.Zero);
}
public static object Get(string cacheKey)
{
return HttpContext.Current.Cache[cacheKey];
}
public static void Clear(string sKey)
{
HttpContext.Current.Cache.Remove(sKey);
}
public static void Clear()
{
foreach (DictionaryEntry item in HttpContext.Current.Cache)
{
Clear(item.Key.ToString());
}
}
}
В методах, которые я хочу кэшировать, я делаю это:
[DataObjectMethod(DataObjectMethodType.Select)]
public static SiteSettingsInfo SiteSettings_SelectOne_Name(string Name)
{
var ck = string.Format("SiteSettings_SelectOne_Name-Name_{0}-", Name.ToLower());
var dt = (DataTable)SiteCache.Get(ck);
if (dt == null)
{
dt = new DataTable();
dt.Load(ModelProvider.SiteSettings_SelectOne_Name(Name));
SiteCache.Set(ck, dt);
}
var info = new SiteSettingsInfo();
foreach (DataRowView dr in dt.DefaultView)
info = SiteSettingsInfo_Load(dr);
return info;
}
Можно ли разделить эти проблемы следующим образом: (обратите внимание на новую аннотацию)
[CacheReturnValue]
[DataObjectMethod(DataObjectMethodType.Select)]
public static SiteSettingsInfo SiteSettings_SelectOne_Name(string Name)
{
var dt = new DataTable();
dt.Load(ModelProvider.SiteSettings_SelectOne_Name(Name));
var info = new SiteSettingsInfo();
foreach (DataRowView dr in dt.DefaultView)
info = SiteSettingsInfo_Load(dr);
return info;
}