AOP02.Core.CacheInterceptor.cacheMethod C# (CSharp) Method

cacheMethod() private static method

private static cacheMethod ( IInvocation invocation ) : void
invocation IInvocation
return void
        private static void cacheMethod(IInvocation invocation)
        {
            var cacheMethodAttribute = getCacheMethodAttribute(invocation);
            if (cacheMethodAttribute == null)
            {
                // متد جاري توسط ويژگي كش شدن مزين نشده است
                // بنابراين آن‌را اجرا كرده و كار را خاتمه مي‌دهيم
                invocation.Proceed();
                return;
            }

            // دراينجا مدت زمان كش شدن متد از ويژگي كش دريافت مي‌شود
            var cacheDuration = ((CacheMethodAttribute)cacheMethodAttribute).SecondsToCache;

            // براي ذخيره سازي اطلاعات در كش نياز است يك كليد منحصربفرد را
            //  بر اساس نام متد و پارامترهاي ارسالي به آن تهيه كنيم
            var cacheKey = getCacheKey(invocation);

            var cache = HttpRuntime.Cache;
            var cachedResult = cache.Get(cacheKey);

            if (cachedResult != null)
            {
                // اگر نتيجه بر اساس كليد تشكيل شده در كش موجود بود
                // همان را بازگشت مي‌دهيم
                invocation.ReturnValue = cachedResult;
            }
            else
            {
                lock (lockObject)
                {
                    // در غير اينصورت ابتدا متد را اجرا كرده
                    invocation.Proceed();
                    if (invocation.ReturnValue == null)
                        return;

                    // سپس نتيجه آن‌را كش مي‌كنيم
                    cache.Insert(key: cacheKey,
                                 value: invocation.ReturnValue,
                                 dependencies: null,
                                 absoluteExpiration: DateTime.Now.AddSeconds(cacheDuration),
                                 slidingExpiration: TimeSpan.Zero);
                }
            }
        }