Пример #1
0
        private static bool TryFindParentContextSourceMemberMatch(SourceMemberMatchContext context)
        {
            if (!context.SearchParentContexts)
            {
                return(false);
            }

            var mappingData = context.MemberMappingData.Parent;

            while (mappingData.Parent != null)
            {
                if (mappingData.MapperData.IsEntryPoint ||
                    mappingData.MapperData.TargetMemberIsEnumerableElement())
                {
                    break;
                }

                mappingData = mappingData.Parent;

                var childMapperData    = new ChildMemberMapperData(context.TargetMember, mappingData.MapperData);
                var contextMappingData = mappingData.GetChildMappingData(childMapperData);

                if (TryFindSourceMemberMatch(context.With(contextMappingData)))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #2
0
        private static IQualifiedMember GetParentContextMatchOrNull(
            IChildMemberMappingData targetData,
            out IChildMemberMappingData contextMappingData)
        {
            var mappingData = targetData.Parent;

            while (mappingData.Parent != null)
            {
                if (mappingData.MapperData.IsEntryPoint ||
                    mappingData.MapperData.TargetMemberIsEnumerableElement())
                {
                    break;
                }

                mappingData = mappingData.Parent;

                var childMapperData = new ChildMemberMapperData(targetData.MapperData.TargetMember, mappingData.MapperData);
                contextMappingData = mappingData.GetChildMappingData(childMapperData);

                var matchingMember = EnumerateSourceMembers(mappingData.MapperData.SourceMember, contextMappingData)
                                     .FirstOrDefault(sm => IsMatchingMember(sm, targetData.MapperData));

                if (matchingMember != null)
                {
                    return(GetFinalSourceMember(matchingMember, targetData));
                }
            }

            contextMappingData = null;
            return(null);
        }