public async Task <PageDefinition> LoadPageDefinitionAsync(Guid key) { GetCachedPageInfo pageInfo = await GetCachedPageAsync(key); PageDefinition page; if (pageInfo.Success) { page = pageInfo.Page; if (page != null) { page.Temporary = false; } } else { page = await DataProvider.GetAsync(key); if (page != null) { page.Temporary = false; await SetCachedPageAsync(page); } else { await SetEmptyCachedPageAsync(key); } } return(page); }
private async Task <GetCachedPageInfo> GetCachedPageAsync(Guid guid) { GetCachedPageInfo pageInfo = new GetCachedPageInfo(); GetObjectInfo <PageDefinition> objInfo; using (ICacheDataProvider sharedCacheDP = YetaWF.Core.IO.Caching.GetSharedCacheProvider()) { objInfo = await sharedCacheDP.GetAsync <PageDefinition>(CacheKey(guid)); } if (!objInfo.Success) { return(pageInfo); } if (objInfo.Data != null) { // make a type correct copy of the data, we don't want caller to modify the cached page Type objType = objInfo.Data.GetType(); PageDefinition newObj = (PageDefinition)Activator.CreateInstance(objType); ObjectSupport.CopyData(objInfo.Data, newObj); pageInfo.Page = newObj; } pageInfo.Success = true; return(pageInfo); }