public Type BindToType(string assemblyName, [Required] string typeName) { Type result; try { if (_knownTypes.ContainsKey(typeName)) { result = _knownTypes[typeName]; } else { #if NETCOREAPP if (string.CompareOrdinal(assemblyName, "mscorlib") == 0) { assemblyName = "System.Private.CoreLib"; } #else if (string.CompareOrdinal(assemblyName, "System.Private.CoreLib") == 0) { assemblyName = "mscorlib"; } #endif var assembly = Assembly.Load(assemblyName); result = GetGenericType(typeName, assembly); if (result == null) { if (typeName.EndsWith("[]")) { int length = typeName.IndexOf('['); if (length >= 0) { string name = typeName.Substring(0, length); if (_knownTypes.ContainsKey(name)) { result = assembly.GetType(typeName); if (result != null) { _knownTypes.Add(typeName, result); } } } } } } } catch { result = typeof(object); HasUnknownTypes = true; TypeNotFound?.Invoke(assemblyName, typeName); } return(result); }
public Type BindToType(string assemblyName, [Required] string typeName) { Type result; try { if (_knownTypes.ContainsKey(typeName)) { result = _knownTypes[typeName]; } else { var assembly = Assembly.Load(assemblyName); result = GetGenericType(typeName, assembly); if (result == null) { if (typeName.EndsWith("[]")) { int length = typeName.IndexOf('['); if (length >= 0) { string name = typeName.Substring(0, length); if (_knownTypes.ContainsKey(name)) { result = assembly.GetType(typeName); if (result != null) { _knownTypes.Add(typeName, result); } } } } } } } catch { result = typeof(object); TypeNotFound?.Invoke(assemblyName, typeName); } return(result); }
/// <inheritdoc/> public TResult GetValue <TResult>() where TResult : V { try { if (!_dictionary.TryGetValue(typeof(TResult), out V result)) { var args = new TypeNotFoundEventArgs <V>(typeof(TResult)); TypeNotFound?.Invoke(this, args); if (args.Value is TResult newResult) { Add(newResult); return(newResult); } } return((TResult)result); } catch (KeyNotFoundException ex) { throw new TypeNotFoundException(Properties.Resources.TypeDictionary_TypeNotFound.FormatString(typeof(TResult).FullName), ex); } }