Пример #1
0
        public TypeFabrication Fabricate(Type baseType)
        {
            TypeFabrication result = Fabricate(baseType.AssemblyQualifiedName);

            result.BaseType = baseType;
            return(result);
        }
Пример #2
0
        public TypeFabrication Fabricate(string def)
        {
            TypeFabrication result      = new TypeFabrication();
            List <String>   genericDefs = null;
            string          cnt         = "0";

            genericDefs = this.SplitDefTypes(def);
            if (genericDefs.Count > 0)
            {
                def = genericDefs.First();
                genericDefs.RemoveAt(0);
            }

            cnt = FindGenericCnt(def);
            List <TypeFabrication> generics = new List <TypeFabrication>();

            for (int i = 0; i < genericDefs.Count; i++)
            {
                generics.Add(Fabricate(genericDefs[i]));
            }

            string[] elements = def.Split(',');
            FillFabricationWithElements(result, elements);

            result.GenericCnt = Convert.ToInt32(cnt);
            result.GenericTypes.Clear();
            result.GenericTypes.AddRange(generics);

            result.CanInstantiate(false);
            return(result);
        }
Пример #3
0
        protected Type FindInAssembly(TypeFabrication fab, Assembly assembly)
        {
            IEnumerator <TypeInfo> et = assembly.DefinedTypes.GetEnumerator();

            while (et.MoveNext())
            {
                if (et.Current.Name.ToLower().Equals(fab.Name.ToLower()))
                {
                    return(et.Current.AsType());
                }
            }
            return(null);
        }
Пример #4
0
        public Type FindBaseType(TypeFabrication fab)
        {
            Type result = null;

            if (fab != null)
            {
                bool findAssembly = fab.Assembly != "";
                result = FindInAssemblyList(fab, pluginAssemblies.AsEnumerable().GetEnumerator());
                if (result == null)
                {
                    result = FindInAssemblyList(fab, preloadedAssemblies.AsEnumerable().GetEnumerator());
                }
            }
            return(result);
        }
Пример #5
0
 protected void FillFabricationWithElements(TypeFabrication result, string[] elements)
 {
     for (int i = 0; i < elements.Count(); i++)
     {
         elements[i] = elements[i].Trim();
         if (elements[i].StartsWith("Version="))
         {
             result.Version = elements[i].Replace("Version=", "").Trim();
         }
         else if (elements[i].StartsWith("Culture="))
         {
             result.Culture = elements[i].Replace("Culture=", "").Trim();
         }
         else if (elements[i].StartsWith("PublicKeyToken="))
         {
             result.PublicKeyToken = elements[i].Replace("PublicKeyToken=", "").Trim();
         }
         else if (i == 1)
         {
             result.Assembly = elements[i].Trim();
         }
         else if (i == 0)
         {
             if (elements[i].Contains('.'))
             {
                 result.Name      = elements[i].Substring(elements[i].LastIndexOf('.') + 1).Trim();
                 result.Namespace = elements[i].Substring(0, elements[i].LastIndexOf('.')).Trim();
             }
             else
             {
                 result.Name = elements[i].Trim();
             }
             if (result.Name.Contains("`"))
             {
                 result.Name = result.Name.Substring(0, result.Name.IndexOf("`"));
             }
         }
     }
 }
Пример #6
0
        protected Type FindInAssemblyList(TypeFabrication fab, IEnumerator <Assembly> enumerator)
        {
            Type result       = null;
            bool deepSearch   = DeepSearch && (String.IsNullOrWhiteSpace(fab.Namespace));
            bool findAssembly = fab.Assembly != "";

            while ((result == null) && (enumerator.MoveNext()))
            {
                Assembly assembly = enumerator.Current;
                if (assembly.GetName().Name == fab.Assembly)
                {
                    result = assembly.GetType(fab.FullName);
                }
                else
                {
                    result = assembly.GetType(fab.FullName);
                    if ((result == null) && (deepSearch))
                    {
                        result = FindInAssembly(fab, assembly);
                    }
                }
            }
            return(result);
        }