public IDataType GetType(string typeName) { var assemblyNameFilter = new PassOnceNameFilter(); var foundType = SearchReferencedAssemblies(typeName, seedAssembly, assemblyNameFilter); if (foundType != null) { typesCache.Add(typeName, foundType); } return dataTypeFactory.Create(foundType); }
private static Type SearchReferencedAssemblies(string typeName, Assembly assembly, PassOnceNameFilter assemblyNameFilter) { Type foundType = null; var assemblies = assembly.GetReferencedAssemblies(); foreach (var assemblyName in assemblies) { if (assemblyNameFilter.Pass(assemblyName.Name)) { Assembly referencedAssembly; try { referencedAssembly = Assembly.Load(assemblyName); } catch (Exception exception) { throw new NSerializerException( string.Format( "Error while tring to find type '{0}'.\nUnable to load assembly '{1}' which is refrenced by assembly '{2}'.", typeName, assemblyName.Name, assembly.FullName), exception); } foundType = referencedAssembly.GetType(typeName); if (foundType == null) { foundType = SearchReferencedAssemblies(typeName, referencedAssembly, assemblyNameFilter); } if (foundType != null) { break; } } } return foundType; }
protected override void SetUp() { filter = new PassOnceNameFilter(); }