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