Catel.Fody.CecilExtensions.FindType C# (CSharp) Method

FindType() public static method

public static FindType ( this moduleDefinition, string assemblyName, string typeName ) : Mono.Cecil.TypeDefinition
moduleDefinition this
assemblyName string
typeName string
return Mono.Cecil.TypeDefinition
        public static TypeDefinition FindType(this ModuleDefinition moduleDefinition, string assemblyName, string typeName)
        {
            var cacheKey = $"{typeName}, {assemblyName}|{moduleDefinition.Name}";
            if (_cachedTypeDefinitions.ContainsKey(cacheKey))
            {
                return _cachedTypeDefinitions[cacheKey];
            }

            var resolvedAssembly = moduleDefinition.ResolveAssembly(assemblyName);
            if (resolvedAssembly == null)
            {
                return null;
            }

            foreach (var module in resolvedAssembly.Modules)
            {
                var allTypes = module.GetAllTypeDefinitions().OrderBy(x => x.FullName);

                var type = (from typeDefinition in allTypes
                            where typeDefinition.FullName == typeName
                            select typeDefinition).FirstOrDefault();
                if (type == null)
                {
                    type = (from typeDefinition in allTypes
                            where typeDefinition.Name == typeName
                            select typeDefinition).FirstOrDefault();
                }

                if (type != null)
                {
                    _cachedTypeDefinitions[cacheKey] = type;
                    return type;
                }
            }

            return null;
        }