Wednesday, February 28, 2018

C#, EPiServer - Find First Parent Page Implementing a Interface



   

 public static T FindFirstParentImplementingInterface<T>(this PageData rootPage, bool includeRootPage = true)
      {
          var page = rootPage;
          if (!includeRootPage)
          {
              page = page.GetParentPage();
          }
          while (page != null)
          {
              if (page.ImplementsInterface(typeof(T)))
              {
                  return (T)(object)page;
              }
              page = page.GetParentPage();
          }

          return default(T);
      }

public static PageData FindFirstParentImplementingInterface(this PageData rootPage, Type interfaceType, bool includeRootPage = true)
      {
          var page = rootPage;
          if (!includeRootPage)
          {
              page = page.GetParentPage();
          }
          while (page != null)
          {
              if (page.ImplementsInterface(interfaceType))
              {
                  return page;
              }
              page = page.GetParentPage();
          }

          return null;
      }

//Support Method
public static bool ImplementsInterface(this PageData pageData, Type interfaceType)
      {
          var type = pageData.GetOriginalType();
          return type != null && interfaceType.IsAssignableFrom(type);
      }

No comments:

Post a Comment