Как вызвать метод пользовательского атрибута до и после выполнения метода C#
Я хочу разработать автоматизированный способ сохранения / извлечения данных из cache
, Вот как я хочу разработать архитектуру для него.
Там будет 2 библиотеки классов
DB.DataAccess -> Этот слой будет выполнять sp/quires, используя ado.net для доступа к данным из базы данных.
DB.DataDistributor -> Это будет промежуточный уровень между базой данных и уровнем представления, вызов DB.DataAccess для получения данных
в DB.DataDistributor я хочу автоматизировать кэширование данных, используя этот способ, используя пользовательский атрибут.
namespace DB.DataDistributor
{
public class MessageManager
{
[CachDataAttribute(CacheKey = CacheKeys.Message, CacheDataType = typeof(List<Message>))]
public List<Message> GetMessages()
{
DB.DataAccess.MesssageManager msgManager = null;
try
{
msgManager = new DB.DataAccess.MesssageManager();
var messages = msgManager.GetMessages();
return messages;
}
catch (Exception)
{
throw;
}
finally
{
msgManager = null;
}
}
}
}
namespace DB.DataDistributor
{
[AttributeUsage(AttributeTargets.Method)]
internal class DataCachingFilterAttribute : Attribute
{
public CacheKeys CacheKey { get; set; }
public Type CacheDataType { get; set; }
public void SetCache()
{
//this method should call after execution of method where DataCachingFilterAttribute has attached
}
public void GetCache()
{
//this method should call before execution of method where DataCachingFilterAttribute has attached
//here I will check if data available in cache then will return data from cache and do not call the achtual method
}
}
public enum CacheKeys
{
Message
}
}
Всякий раз, когда вызывает уровень презентации
GetMessages
методDB.DataDistributor.MessageManager
Система должна выполнитьGetCache()
методDataCachingFilterAttribute
класс, если данные найдены в кеше, то фактический методGetMessages
не должны выполняться, и данные возвращаются напрямую из кеша, иначе называемогоGetMessages
и вернуть данные оттуда.Сразу после возвращения результата из
GetMessages
SetCache
методDataCachingFilterAttribute
должен вызвать, чтобы установить результат в кеше.
Это моя мысль, чтобы автоматизировать кеширование данных, но я не понимаю, как вызвать DataCachingFilterAttribute
методы до и после GetMessages
выполнение метода.
Если у кого-то есть идея или другой хороший подход к автоматизации кэширования, поделитесь.