private static IMemberPopulator Create(QualifiedMember targetMember, IObjectMappingData mappingData)
        {
            var childMapperData = new ChildMemberMapperData(targetMember, mappingData.MapperData);

            if (childMapperData.TargetMemberIsUnmappable(out var reason))
            {
                return(MemberPopulator.Unmappable(childMapperData, reason));
            }

            if (TargetMemberIsUnconditionallyIgnored(
                    childMapperData,
                    out var configuredIgnore,
                    out var populateCondition))
            {
                return(MemberPopulator.IgnoredMember(childMapperData, configuredIgnore));
            }

            var childMappingData = mappingData.GetChildMappingData(childMapperData);
            var dataSources      = DataSourceFinder.FindFor(childMappingData);

            if (dataSources.None)
            {
                return(MemberPopulator.NoDataSource(childMapperData));
            }

            return(MemberPopulator.WithRegistration(childMappingData, dataSources, populateCondition));
        }
        private static IMemberPopulation Create(Member targetMember, IObjectMappingData mappingData)
        {
            var qualifiedMember = mappingData.MapperData.TargetMember.Append(targetMember);
            var childMapperData = new ChildMemberMapperData(qualifiedMember, mappingData.MapperData);

            Expression populateCondition;

            if (TargetMemberIsUnconditionallyIgnored(childMapperData, out populateCondition))
            {
                return(MemberPopulation.IgnoredMember(childMapperData));
            }

            var childMappingData = mappingData.GetChildMappingData(childMapperData);

            var dataSources = childMapperData
                              .MapperContext
                              .DataSources
                              .FindFor(childMappingData);

            if (dataSources.None)
            {
                return(MemberPopulation.NoDataSource(childMapperData));
            }

            return(new MemberPopulation(childMapperData, dataSources, populateCondition));
        }
        private Expression GetPopulation(
            Expression elementMapping,
            QualifiedMember dictionaryEntryMember,
            IObjectMappingData mappingData)
        {
            var elementMapperData  = new ChildMemberMapperData(dictionaryEntryMember, MapperData);
            var elementMappingData = mappingData.GetChildMappingData(elementMapperData);

            var sourceMember       = mappingData.MapperData.SourceMember;
            var mappingDataSource  = new AdHocDataSource(sourceMember, elementMapping);
            var mappingDataSources = new DataSourceSet(elementMapperData, mappingDataSource);

            var memberPopulation     = MemberPopulator.WithoutRegistration(elementMappingData, mappingDataSources);
            var populationExpression = memberPopulation.GetPopulation();

            return(populationExpression);
        }