protected override bool TargetCannotBeMapped(IObjectMappingData mappingData, out string reason)
        {
            var mapperData = mappingData.MapperData;

            if (HasCompatibleSourceMember(mapperData))
            {
                return(base.TargetCannotBeMapped(mappingData, out reason));
            }

            if (ConfiguredMappingFactory.HasMappingFactories(mapperData))
            {
                return(base.TargetCannotBeMapped(mappingData, out reason));
            }

            if (mappingData.GetToTargetDataSources().Any(ds => ds.SourceMember.IsEnumerable))
            {
                return(base.TargetCannotBeMapped(mappingData, out reason));
            }

            reason = "No source enumerable available";
            return(true);
        }
        public static IConfiguredDataSource GetToTargetDataSourceOrNullForTargetType(this IObjectMappingData mappingData)
        {
            var toTargetDataSources = mappingData.GetToTargetDataSources();

            if (toTargetDataSources.None())
            {
                return(null);
            }

            foreach (var dataSource in toTargetDataSources)
            {
                mappingData = mappingData.WithToTargetSource(dataSource.SourceMember);

                if (mappingData.IsTargetConstructable())
                {
                    return(dataSource);
                }
            }

            // TODO: Cover: Unconstructable ToTarget data source
            return(null);
        }