public static IPropertyMapper <TEntity> CreateMapper <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(IPropertyMapper <>).MakeGenericType(typeof(TEntity))); var method = factory.GetMethod(typeBuilder, "Map", typeof(TEntity), typeof(ReadOnlySpan <>).MakeGenericType(typeof(char))); var ilGen = method.GetILGenerator(); factory.GenerateParseCall(ilGen, propertyInfo.PropertyType); factory.GenerateSetProperty(ilGen, propertyInfo); ilGen.Emit(OpCodes.Ret); typeBuilder.DefineMethodOverride(method, typeof(IPropertyMapper <>).MakeGenericType(typeof(TEntity)).GetMethod("Map")); var type = typeBuilder.CreateType(); var constructor = type.GetConstructor(Type.EmptyTypes); var casted = (IPropertyMapper <TEntity>)constructor.Invoke(null); return(casted); }