public async Task <IViewComponentResult> InvokeAsync(ComponentViewModel <ImageWidgetProperties> widgetProperties)
        {
            cacheDependenciesScope.Begin();

            var    Properties = widgetProperties.Properties;
            string ImageUrl;

            if (Properties.UseAttachment)
            {
                if (!string.IsNullOrWhiteSpace(Properties.ImageGuid))
                {
                    cacheDependenciesStore.Store(new string[] { $"attachment|{Guid.Parse(Properties.ImageGuid)}" });
                    ImageUrl = await MediaRepository.GetAttachmentImageAsync(widgetProperties.Page, Guid.Parse(Properties.ImageGuid));
                }
                else
                {
                    ImageUrl = "";
                }
            }
            else
            {
                if (Properties.ImageUrl != null && Properties.ImageUrl.Any(x => true))
                {
                    cacheDependenciesStore.Store(new string[] { $"mediafile|{Properties.ImageUrl.FirstOrDefault().FileGuid}" });
                    ImageUrl = await MediaRepository.GetMediaFileUrlAsync(Properties.ImageUrl.FirstOrDefault().FileGuid);
                }
                else
                {
                    ImageUrl = "";
                }
            }

            // Save dependencies
            widgetProperties.CacheDependencies.CacheKeys = cacheDependenciesScope.End();

            ImageWidgetViewModel model = new ImageWidgetViewModel()
            {
                ImageUrl  = ImageUrl,
                Alt       = Properties.Alt,
                CssClass  = Properties.CssClass,
                ImageType = Properties.UseAttachment ? ImageTypeEnum.Attachment : ImageTypeEnum.MediaFile
            };

            return(View(model));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the Cached result of the function based on the Invocation Name (Cache Key)
        /// </summary>
        /// <param name="invocation"></param>
        /// <param name="dependencyCacheKey"></param>
        /// <returns></returns>
        private object GetCachedResult(IInvocation invocation, string dependencyCacheKey, int MinutesOverride = -1)
        {
            var cacheKey      = GetCacheItemKey(invocation);
            var cacheSettings = CreateCacheSettings(cacheKey, dependencyCacheKey);

            if (MinutesOverride > 0)
            {
                cacheSettings.CacheMinutes = MinutesOverride;
            }

            Func <Object> provideData = () =>
            {
                invocation.Proceed();
                return(invocation.ReturnValue);
            };

            // Add Cache Dependencies to ICacheDependencyStore
            cacheDependenciesStore.Store(dependencyCacheKey.Split(TextHelper.NewLine));

            return(CacheHelper.Cache(provideData, cacheSettings));
        }