コード例 #1
0
        public override void OnInvoke(MethodInterceptionArgs args)
        {
            //cache manager türetiliyor
            var cacheManager = new MemoryCacheManager();

            //metod ismi alınıyor
            var methodName = string.Format("{0}.{1}.{2}",
                                           args.Method.ReflectedType.Namespace,
                                           args.Method.ReflectedType.Name,
                                           args.Method.Name);

            //metod parametreleri alınıyor
            var arguments = args.Arguments.ToList();

            //cache key oluşturuluyor {MetodAdı.Parametreler}
            var key = string.Format("{0}({1})", methodName, string.Join(",", arguments.Select(x => x != null ? x.ToString() : "<Null>")));

            //metod cache de var ise oradan çağrılıyor
            if (cacheManager.IsAdd(key))
            {
                args.ReturnValue = cacheManager.Get <object>(key);
                return;
            }

            //metod çalıştırılıyor
            base.OnInvoke(args);

            //metod cache ekleniyor
            cacheManager.Add(key, args.ReturnValue, _dakika);
        }