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);
 }
Beispiel #3
0
 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);
        }
Beispiel #6
0
        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)));
        }
Beispiel #8
0
        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));
        }
Beispiel #10
0
        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));
        }
Beispiel #11
0
 public static IMemberPopulator IgnoredMember(MemberPopulationContext context)
 => CreateNullMemberPopulator(context, context.MemberIgnore.GetIgnoreMessage);
Beispiel #12
0
 public static IMemberPopulator Unmappable(MemberPopulationContext context, string reason)
 => CreateNullMemberPopulator(context, targetMember => $"No way to populate {targetMember.Name} ({reason})");