Ejemplo n.º 1
0
        public sealed override Type GetType(String name, bool throwOnError, bool ignoreCase)
        {
#if ENABLE_REFLECTION_TRACE
            if (ReflectionTrace.Enabled)
            {
                ReflectionTrace.Assembly_GetType(this, name);
            }
#endif

            if (name == null)
            {
                throw new ArgumentNullException();
            }
            if (name.Length == 0)
            {
                throw new ArgumentException();
            }

            TypeName typeName = TypeParser.ParseAssemblyQualifiedTypeName(name, throwOnError: throwOnError);
            if (typeName == null)
            {
                return(null);
            }
            if (typeName is AssemblyQualifiedTypeName)
            {
                if (throwOnError)
                {
                    throw new ArgumentException(SR.Argument_AssemblyGetTypeCannotSpecifyAssembly);  // Cannot specify an assembly qualifier in a typename passed to Assembly.GetType()
                }
                else
                {
                    return(null);
                }
            }

            CoreAssemblyResolver coreAssemblyResolver = RuntimeAssembly.GetRuntimeAssemblyIfExists;
            CoreTypeResolver     coreTypeResolver     =
                delegate(Assembly containingAssemblyIfAny, string coreTypeName)
            {
                if (containingAssemblyIfAny == null)
                {
                    return(GetTypeCore(coreTypeName, ignoreCase: ignoreCase));
                }
                else
                {
                    return(containingAssemblyIfAny.GetTypeCore(coreTypeName, ignoreCase: ignoreCase));
                }
            };
            GetTypeOptions getTypeOptions = new GetTypeOptions(coreAssemblyResolver, coreTypeResolver, throwOnError: throwOnError, ignoreCase: ignoreCase);

            return(typeName.ResolveType(this, getTypeOptions));
        }
Ejemplo n.º 2
0
        public sealed override Type GetType(String name, bool throwOnError, bool ignoreCase)
        {
            if (ReflectionTrace.Enabled)
            {
                ReflectionTrace.Assembly_GetType(this, name);
            }

            if (name == null)
            {
                throw new ArgumentNullException();
            }
            if (name.Length == 0)
            {
                throw new ArgumentException();
            }

            AssemblyQualifiedTypeName assemblyQualifiedTypeName;

            try
            {
                assemblyQualifiedTypeName = TypeParser.ParseAssemblyQualifiedTypeName(name);
                if (assemblyQualifiedTypeName.AssemblyName != null)
                {
                    throw new ArgumentException(SR.Argument_AssemblyGetTypeCannotSpecifyAssembly);  // Cannot specify an assembly qualifier in a typename passed to Assembly.GetType()
                }
            }
            catch (ArgumentException)
            {
                if (throwOnError)
                {
                    throw;
                }
                return(null);
            }

            RuntimeType result;
            Exception   typeLoadException = assemblyQualifiedTypeName.TypeName.TryResolve(this.ReflectionDomain, this, ignoreCase, out result);

            if (typeLoadException != null)
            {
                if (throwOnError)
                {
                    throw typeLoadException;
                }
                return(null);
            }
            return(result);
        }