public TypeMapper(ServiceLocator locator) { DestType = typeof(TDest); SourceType = typeof(TSource); propertyMappingInfo = new PropertyMappingInfo <TDest>(); registrationInfo = new PropertyRegistrationInfo <TDest>(); locatorMappingInfo = new LocatorRegistrationInfo <TDest>(); this.locator = locator; LocatorInjectOnlyFlaggedProperties = true; }
public override IPropertyMappingInfo GetPropertyMappingInfo(PropertyInfo propertyInfo) { var info = new PropertyMappingInfo(propertyInfo, Instance); info.Type = typeof(string); info.ValueSetter = value => { typeStringBuilder.AppendFormat("{0}:{1}", info.Name, value); typeStringBuilder.AppendLine(); }; return(info); }
public async Task ParseAsync_ReturnsCorrectResults() { // Arrange var dataWithoutHeader = new List <string[]> { new[] { "Mark", "23" }, new[] { "Thomas", "27" }, }; var testEntityMeta = _provider.GetMetadata(1, typeof(TestEntity), null, null); var nameMeta = testEntityMeta.Property(nameof(TestEntity.Name)); var ageMeta = testEntityMeta.Property(nameof(TestEntity.Age)); var nameMapping = new PropertyMappingInfo(nameMeta, nameMeta) { Index = 0 }; var ageMapping = new PropertyMappingInfo(ageMeta, ageMeta) { Index = 1 }; var simpleProps = new List <PropertyMappingInfo> { nameMapping, ageMapping }; var collectionProps = new List <MappingInfo> { }; var mapping = new MappingInfo(testEntityMeta, testEntityMeta, simpleProps, collectionProps, null, null); var errors = new ImportErrors(); // Act var entities = await _parser.ParseAsync <TestEntity>(dataWithoutHeader, mapping, errors); // Assert Assert.Collection(entities, entity => { Assert.Equal("Mark", entity.Name); Assert.Equal(23, entity.Age); }, entity => { Assert.Equal("Thomas", entity.Name); Assert.Equal(27, entity.Age); } ); }
private static List <PropertyMappingInfo> LoadPropertyMappingInfo(Type objType) { List <PropertyMappingInfo> mapInfoList = new List <PropertyMappingInfo>(); foreach (PropertyInfo info in objType.GetProperties()) { MappingAttribute mapAttr = (MappingAttribute)Attribute.GetCustomAttribute(info, typeof(MappingAttribute)); if (mapAttr == null && (System.Type.GetTypeCode(info.PropertyType) != TypeCode.Object || info.PropertyType == new System.TimeSpan().GetType())) { //mapAttr = new MappingAttribute(string.Concat(info.Name, ",un-insert,un-update")); mapAttr = new MappingAttribute(info.Name); } if (mapAttr != null) { PropertyMappingInfo mapInfo = new PropertyMappingInfo(mapAttr.DataFieldName, mapAttr.NullValue, info); mapInfoList.Add(mapInfo); } } return(mapInfoList); }
/// <summary> /// Returns a list of <see cref="PropertyMappingInfo"/> instances that /// represents the mapping between the fields from the <paramref name="dataRecord"/> and /// the <paramref name="type"/> properties. /// </summary> /// <param name="type">The <see cref="Type"/> containing the target properties.</param> /// <param name="dataRecord">The <see cref="IDataRecord"/> that contains the target fields/columns.</param> /// <returns>A list of <see cref="PropertyMappingInfo"/> instances where each instance represents a match /// between a field/column name and a property name.</returns> public IEnumerable <PropertyMappingInfo> Execute(Type type, IDataRecord dataRecord) { var columnOrdinals = this.columnSelector.Execute(dataRecord); PropertyInfo[] properties = this.propertySelector.Execute(type); for (int index = 0; index < properties.Length; index++) { PropertyInfo property = properties[index]; var propertyMappingInfo = new PropertyMappingInfo { Property = property }; int ordinal; if (!columnOrdinals.TryGetValue(property.Name, out ordinal)) { if (!columnOrdinals.TryGetValue(type.Name + "_" + property.Name, out ordinal)) { ordinal = -1; } } propertyMappingInfo.Ordinal = ordinal; yield return(propertyMappingInfo); } }