public static void CachedAssembly(Assembly assembly) { if (CachedAssemblies.Contains(assembly)) { return; } CachedAssemblies.Add(assembly); }
public static IEnumerable <Type> GetDerivedTypes <T>(bool includeAbstract = false, bool includeBase = true) { var type = typeof(T); if (includeBase) { yield return(type); } if (includeAbstract) { foreach (var t in CachedAssemblies.SelectMany(assembly => assembly .GetTypes() .Where(x => type.IsAssignableFrom(x)))) { yield return(t); } } else { var items = new List <Type>(); foreach (var assembly in CachedAssemblies) { try { items.AddRange(assembly.GetTypes() .Where(x => type.IsAssignableFrom(x) && !x.IsAbstract)); } catch (Exception ex) { Debug.Log(ex.Message); } } foreach (var item in items) { yield return(item); } } }