using System.Reflection; namespace WPFluent.Gallery.ControlsLookup; internal static class ControlPages { private const string PageSuffix = "Page"; internal record GalleryPage(string Name, string Description, SymbolRegular Icon, Type PageType); public static IEnumerable All() { foreach ( Type? type in Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsDefined(typeof(GalleryPageAttribute))) ) { GalleryPageAttribute? galleryPageAttribute = type.GetCustomAttributes() .FirstOrDefault(); if (galleryPageAttribute is not null) { yield return new GalleryPage( type.Name[..type.Name.LastIndexOf(PageSuffix)], galleryPageAttribute.Description, galleryPageAttribute.Icon, type ); } } } public static IEnumerable FromNamespace(string namespaceName) { return All().Where(t => t.PageType?.Namespace?.StartsWith(namespaceName) ?? false); } }