예제 #1
0
 public static void CachedAssembly(Assembly assembly)
 {
     if (CachedAssemblies.Contains(assembly))
     {
         return;
     }
     CachedAssemblies.Add(assembly);
 }
예제 #2
0
        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);
                }
            }
        }