Как вызвать метод пользовательского атрибута до и после выполнения метода 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 выполнение метода.

Если у кого-то есть идея или другой хороший подход к автоматизации кэширования, поделитесь.

0 ответов

Другие вопросы по тегам