public static List <GeometryEndPoint> Create(Type t)
        {
            List <GeometryEndPoint> endpoints = new List <GeometryEndPoint>();

            if (!t.IsAbstract)
            {
                var constructors = t.GetConstructors(BindingFlags.Instance | BindingFlags.Public);
                if (constructors != null && constructors.Length > 0)
                {
                    GeometryEndPoint endpoint = new GeometryEndPoint(t, constructors);
                    endpoints.Add(endpoint);
                }
            }

            var methods    = t.GetMethods(BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static);
            var methodlist = new List <MethodInfo>(methods);

            methodlist.Sort((a, b) => a.Name.CompareTo(b.Name));
            for (int i = 0; i < methodlist.Count; i++)
            {
                string funcname  = methodlist[i].Name;
                var    overloads = new List <MethodInfo>();
                overloads.Add(methodlist[i]);
                for (int j = i + 1; j < methodlist.Count; j++)
                {
                    if (funcname.Equals(methodlist[j].Name))
                    {
                        i = j;
                        overloads.Add(methodlist[i]);
                        continue;
                    }
                    break;
                }

                // This is the general "catch all" endpoint that attempts to figure out the best routine to call
                GeometryEndPoint endpoint = new GeometryEndPoint(t, overloads.ToArray());
                endpoints.Add(endpoint);

                foreach (var overload in overloads)
                {
                    var parameters = overload.GetParameters();
                    if (parameters == null || parameters.Length < 1)
                    {
                        continue;
                    }
                    endpoints.Add(new GeometryEndPoint(t, overload));
                }
            }

            return(endpoints);
        }
 private static IEnumerable <GeometryEndPoint> CreateEndpoints(Assembly assembly, string nameSpace)
 {
     foreach (var export in assembly.GetExportedTypes())
     {
         if (!string.Equals(export.Namespace, nameSpace, StringComparison.Ordinal))
         {
             continue;
         }
         if (export.IsInterface || export.IsEnum)
         {
             continue;
         }
         if (export.IsClass || export.IsValueType)
         {
             var endpoints = GeometryEndPoint.Create(export);
             foreach (var endpoint in endpoints)
             {
                 yield return(endpoint);
             }
         }
     }
 }