using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using BurnOutSharp.Interfaces; namespace BurnOutSharp { /// /// Statically-generated lists of scanning classes /// internal static class ScanningClasses { #region Public Collections /// /// Cache for all IContentCheck types /// public static IEnumerable ContentCheckClasses { get { if (contentCheckClasses == null) contentCheckClasses = InitCheckClasses(); return contentCheckClasses; } } /// /// Cache for all INewExecutableCheck types /// public static IEnumerable NewExecutableCheckClasses { get { if (newExecutableCheckClasses == null) newExecutableCheckClasses = InitCheckClasses(); return newExecutableCheckClasses; } } /// /// Cache for all IPathCheck types /// public static IEnumerable PathCheckClasses { get { if (pathCheckClasses == null) pathCheckClasses = InitCheckClasses(); return pathCheckClasses; } } /// /// Cache for all IPortableExecutableCheck types /// public static IEnumerable PortableExecutableCheckClasses { get { if (portableExecutableCheckClasses == null) portableExecutableCheckClasses = InitCheckClasses(); return portableExecutableCheckClasses; } } #endregion #region Internal Instances /// /// Cache for all IContentCheck types /// private static IEnumerable contentCheckClasses; /// /// Cache for all INEContentCheck types /// private static IEnumerable newExecutableCheckClasses; /// /// Cache for all IPathCheck types /// private static IEnumerable pathCheckClasses; /// /// Cache for all IPEContentCheck types /// private static IEnumerable portableExecutableCheckClasses; #endregion #region Initializers /// /// Initialize all implementations of a type /// private static IEnumerable InitCheckClasses() { return Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsClass && t.GetInterface(typeof(T).Name) != null) .Select(t => (T)Activator.CreateInstance(t)); } #endregion } }