コード例 #1
0
        public static IEnumerable <IDataSource> Create(DataSourceFindContext context)
        {
            if (context.TargetMember.IsCustom)
            {
                yield break;
            }

            if (context.DoNotUseSourceMemberDataSource())
            {
                if (context.DataSourceIndex == 0)
                {
                    if (context.UseFallbackComplexTypeDataSource())
                    {
                        yield return(ComplexTypeDataSource.Create(context.DataSourceIndex, context.MemberMappingData));
                    }
                }
                else if (context.UseFallbackForConditionalConfiguredDataSource())
                {
                    yield return(context.GetFallbackDataSource());
                }

                if (context.UseConfiguredDataSourcesOnly())
                {
                    yield break;
                }
            }

            if (context.ReturnSimpleTypeToTargetDataSources())
            {
                var updatedMapperData = new ChildMemberMapperData(
                    context.MatchingSourceMemberDataSource.SourceMember,
                    context.TargetMember,
                    context.MemberMapperData.Parent);

                var configuredRootDataSources = context
                                                .MapperContext
                                                .UserConfigurations
                                                .GetDataSourcesForToTarget(updatedMapperData);

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

            yield return(context.MatchingSourceMemberDataSource);

            if (context.UseFallbackDataSource())
            {
                yield return(context.GetFallbackDataSource());
            }
        }
コード例 #2
0
        public IDataSource GetFinalDataSource(IDataSource foundDataSource, IChildMemberMappingData mappingData)
        {
            var childTargetMember = mappingData.MapperData.TargetMember;

            if (UseComplexTypeDataSource(foundDataSource, childTargetMember))
            {
                return(ComplexTypeDataSource.Create(foundDataSource, DataSourceIndex, mappingData));
            }

            if (childTargetMember.IsEnumerable && foundDataSource.SourceMember.IsEnumerable)
            {
                return(new EnumerableDataSource(foundDataSource, DataSourceIndex, mappingData));
            }

            return(foundDataSource);
        }
コード例 #3
0
 public IDataSource CreateFor(IObjectMappingData mappingData)
 => ComplexTypeDataSource.Create(mappingData);