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()); } }
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()); } } }
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()); }