Thursday, May 21, 2015

C#, EpiServer - Various Lazy Loading Examples

  private PageData _gigPage;  
     protected PageData GigPage  
     {  
       get  
       {  
         if( _gigPage == null )  
         {  
           PageReference gigPageRef = CurrentPage.GigPageLink;  
           if( !PageReference.IsNullOrEmpty(gigPageRef) )  
           {  
             PageData gigPage = DataFactory.Instance.GetPage(gigPageRef);  
             _gigPage = gigPage;  
           }  
         }  
         return _gigPage;  
       }  
     }  

Fetch a simple Property with Lazy loading

 protected string PageHeading  
     {  
       get { return _heading ?? (_heading = CurrentPage.Heading); }  
       set { _heading = value; }  
     }  

Fetch a Settingspage Lazy with cache timeout (not recommended since EPiServer handles this better)

 public static class SiteHelper  
   {  
     private static SettingsPage _settingsPage;  
     private static DateTime _fetchTime;  
     public static SettingsPage GetSettingsPage()  
     {  
       const string errorMsg = "Error retrieving settingspage, contact site administrator";  
       try  
       {  
         if (_settingsPage != null && !TimeHasElapsed(5))  
         {  
           return _settingsPage;  
         }  
         StartPage startPage = DataFactory.Instance.GetPage(ContentReference.StartPage) as StartPage;  
         if (startPage != null && startPage.SettingsPage != null)  
         {  
           var page = DataFactory.Instance.GetPage(startPage.SettingsPage);  
           if (page is SettingsPage)  
           {  
             _settingsPage = page as SettingsPage;  
             _fetchTime = DateTime.UtcNow;  
           }  
         }  
         return _settingsPage;  
       }  
       catch (Exception e)  
       {  
         throw new Exception(errorMsg + ": " + e);  
       }  
     }  
     private static bool TimeHasElapsed(int timespan)  
     {  
       if (_fetchTime.AddMinutes(timespan) > DateTime.UtcNow)  
       {  
         return false;  
       }  
       return true;  
     }  
   }   

No comments:

Post a Comment