Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
        /// <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);
        }