Exemple #1
0
        public IEnumerable <IDataSource> FindFor(DataSourceFindContext context)
        {
            if (context.MapperData.TargetMember.IsCustom)
            {
                yield break;
            }

            var matchingSourceMemberDataSource = GetSourceMemberDataSourceOrNull(context);
            var configuredDataSources          = context.ConfiguredDataSources;
            var targetMember = context.MapperData.TargetMember;

            if ((matchingSourceMemberDataSource == null) ||
                configuredDataSources.Any(cds => cds.IsSameAs(matchingSourceMemberDataSource)))
            {
                if (context.DataSourceIndex == 0)
                {
                    if (UseFallbackComplexTypeMappingDataSource(targetMember))
                    {
                        yield return(new ComplexTypeMappingDataSource(context.DataSourceIndex, context.ChildMappingData));
                    }
                }
                else if (configuredDataSources.Any() && configuredDataSources.Last().IsConditional)
                {
                    yield return(context.GetFallbackDataSource());
                }

                yield break;
            }

            if (matchingSourceMemberDataSource.SourceMember.IsSimple &&
                context.MapperData.MapperContext.UserConfigurations.HasConfiguredRootDataSources)
            {
                var updatedMapperData = new ChildMemberMapperData(
                    matchingSourceMemberDataSource.SourceMember,
                    targetMember,
                    context.MapperData.Parent);

                var configuredRootDataSources = context
                                                .MapperData
                                                .MapperContext
                                                .UserConfigurations
                                                .GetDataSources(updatedMapperData);

                foreach (var configuredRootDataSource in configuredRootDataSources)
                {
                    yield return(configuredRootDataSource);
                }
            }

            yield return(matchingSourceMemberDataSource);

            if (!targetMember.IsReadOnly &&
                matchingSourceMemberDataSource.IsConditional &&
                (matchingSourceMemberDataSource.IsValid || configuredDataSources.Any()))
            {
                yield return(context.GetFallbackDataSource());
            }
        }
Exemple #2
0
        public IEnumerable <IDataSource> FindFor(DataSourceFindContext context)
        {
            if (TryGetMetaMemberNameParts(context, out var memberNameParts) &&
                TryGetMetaMember(memberNameParts, context, out var metaMember))
            {
                var dataSource = metaMember.GetDataSource();

                yield return(context.GetFinalDataSource(dataSource));

                if (dataSource.IsConditional)
                {
                    yield return(context.GetFallbackDataSource());
                }
            }
        }
Exemple #3
0
        public IEnumerable <IDataSource> FindFor(DataSourceFindContext context)
        {
            if (!UseMaptimeDataSources(context, out var maptimeDataSources))
            {
                yield break;
            }

            context.StopFind = true;

            foreach (var maptimeDataSource in maptimeDataSources)
            {
                yield return(context.GetFinalDataSource(maptimeDataSource));

                if (maptimeDataSource.IsConditional)
                {
                    continue;
                }

                yield break;
            }

            yield return(context.GetFallbackDataSource());
        }