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