// // 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)); }
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; }
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)); }