Пример #1
0
        //
        // Retrieves a type by name. Helper to implement Type.GetType();
        //
        public Type GetType(String typeName, Func <AssemblyName, Assembly> assemblyResolver, Func <Assembly, string, bool, Type> typeResolver, bool throwOnError, bool ignoreCase, IList <string> defaultAssemblyNames)
        {
            if (typeName == null)
            {
                throw new ArgumentNullException();
            }

            if (typeName.Length == 0)
            {
                if (throwOnError)
                {
                    throw new TypeLoadException(SR.Arg_TypeLoadNullStr);
                }
                else
                {
                    return(null);
                }
            }

            TypeName parsedName = TypeParser.ParseAssemblyQualifiedTypeName(typeName, throwOnError: throwOnError);

            if (parsedName == null)
            {
                return(null);
            }
            CoreAssemblyResolver coreAssemblyResolver = CreateCoreAssemblyResolver(assemblyResolver);
            CoreTypeResolver     coreTypeResolver     = CreateCoreTypeResolver(typeResolver, defaultAssemblyNames, throwOnError: throwOnError, ignoreCase: ignoreCase);
            GetTypeOptions       getTypeOptions       = new GetTypeOptions(coreAssemblyResolver, coreTypeResolver, throwOnError: throwOnError, ignoreCase: ignoreCase);

            return(parsedName.ResolveType(null, getTypeOptions));
        }
Пример #2
0
        public GetTypeOptions(CoreAssemblyResolver coreAssemblyResolver, CoreTypeResolver coreTypeResolver, bool throwOnError, bool ignoreCase)
        {
            Debug.Assert(coreAssemblyResolver != null);
            Debug.Assert(coreTypeResolver != null);

            _coreAssemblyResolver = coreAssemblyResolver;
            _coreTypeResolver = coreTypeResolver;
            ThrowOnError = throwOnError;
            IgnoreCase = ignoreCase;
        }
Пример #3
0
        public GetTypeOptions(CoreAssemblyResolver coreAssemblyResolver, CoreTypeResolver coreTypeResolver, bool throwOnError, bool ignoreCase)
        {
            Debug.Assert(coreAssemblyResolver != null);
            Debug.Assert(coreTypeResolver != null);

            _coreAssemblyResolver = coreAssemblyResolver;
            _coreTypeResolver     = coreTypeResolver;
            ThrowOnError          = throwOnError;
            IgnoreCase            = ignoreCase;
        }
Пример #4
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));
        }