/// <summary> /// Resolve type by name. /// </summary> /// <param name="typeName">Name of the type.</param> /// <param name="assemblyName">Optional, name of the assembly.</param> /// <param name="nameMapper">The name mapper.</param> /// <returns> /// Resolved type. /// </returns> public Type ResolveType(string typeName, string assemblyName = null, IBinaryNameMapper nameMapper = null) { Debug.Assert(!string.IsNullOrEmpty(typeName)); // Fully-qualified name can be resolved with system mechanism. var type = Type.GetType(typeName, false); if (type != null) { return(type); } var parsedType = TypeNameParser.Parse(typeName); // Partial names should be resolved by scanning assemblies. return(ResolveType(assemblyName, parsedType, AppDomain.CurrentDomain.GetAssemblies(), nameMapper) ?? ResolveTypeInReferencedAssemblies(assemblyName, parsedType, nameMapper)); }
/// <summary> /// Resolve type by name in specified assembly set. /// </summary> /// <param name="assemblyName">Name of the assembly.</param> /// <param name="typeName">Name of the type.</param> /// <param name="assemblies">Assemblies to look in.</param> /// <returns> /// Resolved type. /// </returns> private static Type ResolveType(string assemblyName, TypeNameParser typeName, ICollection <Assembly> assemblies) { var type = ResolveNonGenericType(assemblyName, typeName.GetFullName(), assemblies); if (type == null) { return(null); } if (type.IsGenericTypeDefinition && typeName.Generics != null) { var genArgs = typeName.Generics.Select(x => ResolveType(assemblyName, x, assemblies)).ToArray(); return(type.MakeGenericType(genArgs)); } return(type); }