如何在执行方法c#之前和之后触发自定义属性方法

时间:2018-06-05 07:15:52

标签: c# asp.net custom-attributes data-caching

我想设计一种自动保存/检索cache数据的方法。这就是我想要为它设计架构的方式。

将有2个类库

  

DB.DataAccess - >该层将使用执行sp / quires                             ado.net从数据库访问数据

     

DB.DataDistributor - >这将是db和。之间的中间层                           表示层调用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 个答案:

没有答案