private TypeMap GetTypeMap()

in tools/AutoMapper/MapperConfiguration.cs [218:265]


        private TypeMap GetTypeMap(TypePair initialTypes)
        {
            var doesNotHaveMapper = FindMapper(initialTypes) == null;

            foreach (var types in initialTypes.GetRelatedTypePairs())
            {
                if (types != initialTypes && _typeMapPlanCache.TryGetValue(types, out var typeMap))
                {
                    if (typeMap != null)
                    {
                        return typeMap;
                    }
                }
                typeMap = FindTypeMapFor(types);
                if (typeMap != null)
                {
                    return typeMap;
                }
                typeMap = FindClosedGenericTypeMapFor(types);
                if (typeMap != null)
                {
                    return typeMap;
                }
                if (doesNotHaveMapper)
                {
                    typeMap = FindConventionTypeMapFor(types);
                    if (typeMap != null)
                    {
                        return typeMap;
                    }
                }
            }

            if (doesNotHaveMapper
                && Configuration.CreateMissingTypeMaps
                && !(initialTypes.SourceType.IsAbstract() && initialTypes.SourceType.IsClass())
                && !(initialTypes.DestinationType.IsAbstract() && initialTypes.DestinationType.IsClass())
                && !ExcludedTypes.Contains(initialTypes.SourceType)
                && !ExcludedTypes.Contains(initialTypes.DestinationType))
            {
                lock (this)
                {
                    return Configuration.CreateInlineMap(_typeMapRegistry, initialTypes);
                }
            }

            return null;
        }