private static bool HasCompatibleSourceMember(IMemberMapperData mapperData)
        {
            if (!mapperData.SourceMember.IsEnumerable)
            {
                return(false);
            }

            var sourceElementMember = mapperData.SourceMember.GetElementMember();
            var targetElementMember = mapperData.TargetMember.GetElementMember();

            if (mapperData.CanConvert(sourceElementMember.Type, targetElementMember.Type))
            {
                return(true);
            }

            if (!mapperData.MapperContext.UserConfigurations.HasMappingFactories)
            {
                return(false);
            }

            var queryContext = new QualifiedMemberContext(
                mapperData.RuleSet,
                sourceElementMember.Type,
                targetElementMember.Type,
                sourceElementMember,
                targetElementMember,
                mapperData,
                mapperData.MapperContext);

            return(ConfiguredMappingFactory.HasMappingFactories(queryContext));
        }
        private static IList <DerivedTypePair> GetTypePairsFor(
            Type derivedSourceType,
            Type targetType,
            IMemberMapperData mapperData)
        {
            var pairTestMapperData = new QualifiedMemberContext(
                mapperData.RuleSet,
                derivedSourceType,
                targetType,
                mapperData.TargetMember.WithType(targetType),
                mapperData.Parent,
                mapperData.MapperContext);

            return(pairTestMapperData.GetDerivedTypePairs());
        }
        private static IEnumerable <ConfiguredObjectFactory> QuerySimpleTypeValueFactories(
            this IQualifiedMemberContext context,
            Type sourceType,
            Type targetType)
        {
            if (!targetType.IsSimple())
            {
                return(Enumerable <ConfiguredObjectFactory> .Empty);
            }

            var queryContext = new QualifiedMemberContext(
                context.RuleSet,
                sourceType,
                targetType.GetNonNullableType(),
                QualifiedMember.All,
                context.Parent,
                context.MapperContext);

            return(context
                   .MapperContext
                   .UserConfigurations
                   .QueryObjectFactories(queryContext));
        }