Как вызвать метод пользовательского атрибута до и после выполнения метода c # - PullRequest
0 голосов
/ 05 июня 2018

Я хочу разработать автоматизированный способ сохранения / извлечения данных из cache.Вот как я хочу спроектировать архитектуру для него.

Было бы 2 библиотеки классов

DB.DataAccess -> Этот слой будет выполнять sp/ требует использования 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...