protected void MapProperty <TProperty>(int columnIndex, Expression <Func <TEntity, TProperty> > mappingExpression) { var propertyName = GetPropertyNameFromExpression(mappingExpression); var mapper = PropertyMapperFactory.CreateMapper <TEntity>(propertyName); var mapping = new CsvPropertyMapping(columnIndex, mapper); _mappings.Insert(columnIndex, mapping); _numCols++; }
public static IUtf8PropertyMapper <TEntity> CreateMapperUtf8 <TEntity>(string propertyName) { var factory = new PropertyMapperFactory(); var propertyInfo = typeof(TEntity).GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance); var assemblyBuilder = factory.GetAssemblyBuilder("Mappers"); var moduleBuilder = factory.GetModuleBuilder(assemblyBuilder); var typeBuilder = factory.GetType(moduleBuilder, typeof(TEntity).Name, typeof(IUtf8PropertyMapper <>).MakeGenericType(typeof(TEntity))); var method = factory.GetMethod(typeBuilder, "Map", typeof(TEntity), typeof(ReadOnlySpan <>).MakeGenericType(typeof(byte))); var ilGen = method.GetILGenerator(); factory.GenerateParseCallUtf8(ilGen, propertyInfo.PropertyType); factory.GenerateSetProperty(ilGen, propertyInfo); ilGen.Emit(OpCodes.Ret); typeBuilder.DefineMethodOverride(method, typeof(IUtf8PropertyMapper <>).MakeGenericType(typeof(TEntity)).GetMethod("Map")); var type = typeBuilder.CreateType(); var constructor = type.GetConstructor(Type.EmptyTypes); var casted = (IUtf8PropertyMapper <TEntity>)constructor.Invoke(null); return(casted); }