private static IMemberPopulator Create(QualifiedMember targetMember, IObjectMappingData mappingData)
        {
            var childMapperData = new ChildMemberMapperData(targetMember, mappingData.MapperData);

            if (childMapperData.TargetMemberIsUnmappable(out var reason))
            {
                return(MemberPopulator.Unmappable(childMapperData, reason));
            }

            if (TargetMemberIsUnconditionallyIgnored(
                    childMapperData,
                    out var configuredIgnore,
                    out var populateCondition))
            {
                return(MemberPopulator.IgnoredMember(childMapperData, configuredIgnore));
            }

            var childMappingData = mappingData.GetChildMappingData(childMapperData);
            var dataSources      = DataSourceFinder.FindFor(childMappingData);

            if (dataSources.None)
            {
                return(MemberPopulator.NoDataSource(childMapperData));
            }

            return(MemberPopulator.WithRegistration(childMappingData, dataSources, populateCondition));
        }
Example #2
0
 public MapperContext(NamingSettings namingSettings = null)
 {
     Cache               = new CacheSet();
     DataSources         = new DataSourceFinder();
     NamingSettings      = namingSettings ?? new NamingSettings();
     RootMembersSource   = new RootMembersSource(new RootQualifiedMemberFactory(this));
     ObjectMapperFactory = new ObjectMapperFactory(this);
     ObjectFlattener     = new ObjectFlattener();
     DerivedTypes        = new DerivedTypesCache();
     UserConfigurations  = new UserConfigurationSet();
     ValueConverters     = new ConverterSet();
     RuleSets            = new MappingRuleSetCollection();
 }
            private static Tuple <QualifiedMember, DataSourceSet>[] GetArgumentDataSources(TInvokable invokable, ConstructionKey key)
            {
                return(invokable
                       .GetParameters()
                       .ProjectToArray(p =>
                {
                    var parameterMapperData = new ChildMemberMapperData(
                        key.MappingData.MapperData.TargetMember.Append(Member.ConstructorParameter(p)),
                        key.MappingData.MapperData);

                    var memberMappingData = key.MappingData.GetChildMappingData(parameterMapperData);
                    var dataSources = DataSourceFinder.FindFor(memberMappingData);

                    return Tuple.Create(memberMappingData.MapperData.TargetMember, dataSources);
                }));
            }
Example #4
0
        public void FindTest()
        {
            Customer customer = new Customer();
            Order    order    = new Order {
                OwnerCustomer = customer,
            };
            OrderGoods goods = new OrderGoods {
                OwnerOrder = order,
            };
            OrderReady      ready      = new OrderReady();
            OrderReadyGoods readyGoods = new OrderReadyGoods {
                OwnerGoods = goods,
            };
            OrderWarehouse warehouse = new OrderWarehouse {
                OwnerOrder = order,
            };
            OrderWarehouseGoods warehouseGoods = new OrderWarehouseGoods {
                OwnerGoods     = goods,
                OwnerWarehouse = warehouse,
            };
            NewOrderWarehouseGoods newWarehouseGoods = new NewOrderWarehouseGoods {
                OwnerGoods     = goods,
                OwnerWarehouse = warehouse,
            };
            OrderDelivery delivery = new OrderDelivery {
                OwnerOrder = order,
            };
            OrderDeliveryGoods deliveryGoods = new OrderDeliveryGoods {
                OwnerGoods    = goods,
                OwnerDelivery = delivery,
            };
            OrderPayment payment = new OrderPayment {
                OwnerOrder = order,
            };

            DataSourceFinder finder = DataSourceFinder.Instance;

            Assert.AreSame(customer, finder.Find <Customer>(warehouseGoods));
            Assert.AreSame(customer, finder.Find <Customer>(newWarehouseGoods));
            Assert.AreSame(customer, finder.Find <Customer>(deliveryGoods));
            Assert.AreSame(customer, finder.Find <Customer>(readyGoods));
            Assert.AreSame(customer, finder.Find <Customer>(payment));
            Assert.IsNull(finder.Find <Customer>(ready));
            Assert.IsNull(finder.Find <A>(new C()));
        }