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);
}