private static IMemberPopulator Create(MemberPopulationContext context) { if (TargetMemberIsUnmappable(context, out var reason)) { return(NullMemberPopulator.Unmappable(context, reason)); } if (context.TargetMemberIsUnconditionallyIgnored(out var populateCondition)) { return(NullMemberPopulator.IgnoredMember(context)); } var dataSourceFindContext = context.GetDataSourceFindContext(); var dataSources = MemberDataSourceSetFactory.CreateFor(dataSourceFindContext); if (dataSources.None) { return(NullMemberPopulator.NoDataSources(context)); } dataSourceFindContext.MemberMapperData.RegisterTargetMemberDataSources(dataSources); return(new MemberPopulator( dataSources, dataSourceFindContext.MemberMapperData, populateCondition)); }
private static MemberPopulator CreateNullMemberPopulator( MemberPopulationContext context, Func <QualifiedMember, string> commentFactory) { return(context.MappingContext.AddUnsuccessfulMemberPopulations ? new MemberPopulator(CreateNullDataSourceSet(context.MemberMapperData, commentFactory)) : null); }
private static IMemberPopulator CreateNullMemberPopulator( MemberPopulationContext context, Func <QualifiedMember, string> commentFactory) { return(CreateNullMemberPopulator( commentFactory, context, CreateNullPopulatorDescription)); }
public IEnumerable <IMemberPopulator> Create(IObjectMappingData mappingData) { var populationContext = new MemberPopulationContext(mappingData); return(_targetMembersFactory .Invoke(mappingData.MapperData) .Project(populationContext, (ctx, tm) => Create(ctx.With(tm))) .WhereNotNull()); }
public static IMemberPopulator NoDataSource(MemberPopulationContext context) { var noDataSources = CreateNullDataSourceSet(context.MemberMapperData, GetNoDataSourceMessage); context.MemberMapperData.RegisterTargetMemberDataSourcesIfRequired(noDataSources); return(context.MappingContext.AddUnsuccessfulMemberPopulations ? new MemberPopulator(noDataSources) : null); }
public static IMemberPopulator NoDataSources(MemberPopulationContext context) { var noDataSourcesMessage = CreateNullPopulatorDescription( GetNoDataSourcesMessage, context.MemberMapperData); var noDataSource = new NullDataSource(noDataSourcesMessage); var noDataSources = DataSourceSet.For(noDataSource, context); context.MemberMapperData.RegisterTargetMemberDataSources(noDataSources); return(CreateNullMemberPopulator(noDataSourcesMessage, context, (msg, md) => msg)); }
private static bool TargetMemberWillBePopulatedByCtor(MemberPopulationContext context) { if (!context.TargetMember.LeafMember.HasMatchingCtorParameter || (context.RuleSet.Settings.RootHasPopulatedTarget && context.MappingData.IsRoot)) { return(false); } var creationInfos = context.MappingData.GetTargetObjectCreationInfos(); return(creationInfos.Any() && creationInfos.All(ci => ci.IsUnconditional && ci.HasCtorParameterFor(context.TargetMember.LeafMember))); }
private static IMemberPopulator CreateNullMemberPopulator <TArg>( TArg argument, MemberPopulationContext context, Func <TArg, IMemberMapperData, Expression> descriptionFactory) { if (context.MappingContext.IgnoreUnsuccessfulMemberPopulations) { return(null); } var mapperData = context.MemberMapperData; var description = descriptionFactory.Invoke(argument, mapperData); return(new NullMemberPopulator(description, mapperData)); }
private static bool TargetMemberIsUnmappable(MemberPopulationContext context, out string reason) { if (!context.RuleSet.Settings.AllowSetMethods && (context.TargetMember.LeafMember.MemberType == MemberType.SetMethod)) { reason = "Set methods are unsupported by rule set '" + context.RuleSet.Name + "'"; return(true); } if (TargetMemberWillBePopulatedByCtor(context)) { reason = "Expected to be populated by constructor parameter"; return(true); } return(context.MemberMapperData.TargetMemberIsUnmappable( context.TargetMember, md => md.MapperContext.UserConfigurations.QueryDataSourceFactories(md), context.MapperContext.UserConfigurations, out reason)); }
private static IMemberPopulator Create(MemberPopulationContext context) { if (TargetMemberIsUnmappable(context, out var reason)) { return(MemberPopulator.Unmappable(context, reason)); } if (context.TargetMemberIsUnconditionallyIgnored(out var populateCondition)) { return(MemberPopulator.IgnoredMember(context)); } var dataSourceFindContext = context.GetDataSourceFindContext(); var dataSources = DataSourceSetFactory.CreateFor(dataSourceFindContext); if (dataSources.None) { return(MemberPopulator.NoDataSource(context)); } return(MemberPopulator.WithRegistration(dataSources, populateCondition)); }
public static IMemberPopulator IgnoredMember(MemberPopulationContext context) => CreateNullMemberPopulator(context, context.MemberIgnore.GetIgnoreMessage);
public static IMemberPopulator Unmappable(MemberPopulationContext context, string reason) => CreateNullMemberPopulator(context, targetMember => $"No way to populate {targetMember.Name} ({reason})");