Ejemplo n.º 1
0
 public static Type GetType(this IDotnetExpander expander, string assemblyName, string typeName)
 {
     return(Ex.Cache.Read("types", assemblyName ?? "", typeName ?? "", () =>
     {
         if (string.IsNullOrWhiteSpace(typeName))
         {
             return null;
         }
         assemblyName = assemblyName ?? "";
         typeName = typeName ?? "";
         Assembly assembly;
         Type type;
         if (!string.IsNullOrWhiteSpace(assemblyName))
         {
             assembly = expander.GetAssembly(assemblyName);
             if (assembly != null)
             {
                 type = assembly.GetType(typeName, false, true);
                 if (type != null)
                 {
                     return type;
                 }
             }
         }
         type = Type.GetType(typeName, false, true);
         if (type != null)
         {
             return type;
         }
         var pos = typeName.Length;
         while (true)
         {
             try
             {
                 pos = typeName.LastIndexOf(".", pos - 1, StringComparison.Ordinal);
                 if (pos < 1)
                 {
                     return null;
                 }
                 assemblyName = typeName.Substring(0, pos);
                 assembly = expander.GetAssembly(assemblyName);
                 if (assembly == null)
                 {
                     continue;
                 }
                 type = assembly.GetType(typeName);
                 if (type != null)
                 {
                     return type;
                 }
                 var libraryName = assemblyName + (!assemblyName.EndsWith(".dll") ? ".dll" : string.Empty) + ", ";
                 type = assembly.GetType(typeName.Replace(libraryName, string.Empty));
                 if (type != null)
                 {
                     return type;
                 }
             }
             catch (Exception)
             {
                 return null;
             }
         }
     }));
 }