public static void RegisterTargetMemberDataSources(
     this IMemberMapperData memberMapperData,
     IDataSourceSet dataSources)
 {
     memberMapperData.Parent
     .MergeTargetMemberDataSources(memberMapperData.TargetMember, dataSources);
 }
Exemplo n.º 2
0
        public static IMemberPopulator WithRegistration(IDataSourceSet dataSources, Expression populateCondition)
        {
            var memberPopulation = WithoutRegistration(dataSources, populateCondition);

            memberPopulation.MapperData.RegisterTargetMemberDataSourcesIfRequired(dataSources);

            return(memberPopulation);
        }
Exemplo n.º 3
0
 public MemberPopulator(
     IDataSourceSet dataSources,
     IMemberMapperData mapperData,
     Expression populateCondition = null)
 {
     _dataSources      = dataSources;
     MapperData        = mapperData;
     PopulateCondition = populateCondition;
 }
        public static void MergeTargetMemberDataSources(
            this ObjectMapperData mapperData,
            QualifiedMember targetMember,
            IDataSourceSet dataSources)
        {
            var dataSourcesByTargetMember = mapperData.DataSourcesByTargetMember;

            if (dataSourcesByTargetMember.TryGetValue(targetMember, out var registeredDataSources) &&
                registeredDataSources.HasValue)
            {
                return;
            }

            dataSourcesByTargetMember[targetMember] = dataSources;
        }
            private static Expression BuildConditions(IDataSourceSet dataSources)
            {
                var conditions = default(Expression);

                foreach (var dataSource in dataSources.Filter(ds => ds.IsConditional))
                {
                    if (conditions == null)
                    {
                        conditions = dataSource.Condition;
                        continue;
                    }

                    conditions = Expression.OrElse(conditions, dataSource.Condition);
                }

                return(conditions);
            }
            protected ConstructionDataInfo(
                TInvokable invokable,
                ConstructionKey key,
                int priority)
            {
                var parameters = invokable.GetParameters();

                Priority               = priority;
                ParameterCount         = parameters.Length;
                _argumentTargetMembers = new QualifiedMember[ParameterCount];
                ArgumentDataSources    = new IDataSourceSet[ParameterCount];

                CanBeInvoked = IsUnconditional = true;
                var mappingData = key.MappingData;
                var mapperData  = mappingData.MapperData;

                for (var i = 0; i < ParameterCount; ++i)
                {
                    var argumentMember = Member.ConstructorParameter(parameters[i]);

                    var targetMember = _argumentTargetMembers[i] =
                        mapperData.TargetMember.Append(argumentMember);

                    var argumentMapperData  = new ChildMemberMapperData(targetMember, mapperData);
                    var argumentMappingData = mappingData.GetChildMappingData(argumentMapperData);

                    var dataSources = ArgumentDataSources[i] = MemberDataSourceSetFactory
                                                               .CreateFor(new DataSourceFindContext(argumentMappingData));

                    if (CanBeInvoked && !dataSources.HasValue)
                    {
                        CanBeInvoked = false;
                    }

                    if (IsUnconditional && dataSources.IsConditional && argumentMember.IsComplex)
                    {
                        IsUnconditional = false;
                    }
                }
            }
            private static Expression BuildConditions(IDataSourceSet dataSources)
            {
                var conditions = default(Expression);

                for (var i = 0; i < dataSources.Count; ++i)
                {
                    var dataSource = dataSources[i];

                    if (!dataSource.IsConditional)
                    {
                        continue;
                    }

                    if (conditions == null)
                    {
                        conditions = dataSource.Condition;
                        continue;
                    }

                    conditions = Expression.OrElse(conditions, dataSource.Condition);
                }

                return(conditions);
            }
Exemplo n.º 8
0
 public static void RegisterTargetMemberDataSourcesIfRequired(
     this IMemberMapperData mapperData,
     IDataSourceSet dataSources)
 {
     mapperData.Parent.DataSourcesByTargetMember.Add(mapperData.TargetMember, dataSources);
 }
Exemplo n.º 9
0
 public static IMemberPopulator WithoutRegistration(IDataSourceSet dataSources, Expression populateCondition = null)
 => new MemberPopulator(dataSources, populateCondition);
Exemplo n.º 10
0
 private MemberPopulator(IDataSourceSet dataSources, Expression populateCondition = null)
 {
     _dataSources      = dataSources;
     PopulateCondition = populateCondition;
 }