También hay un proyecto interesante llamado Otis. A continuación se muestra el ejemplo de mapeo * .otis.xml tomada de la página de documentación:
<?xml version="1.0" encoding="utf-8" ?>
<otis-mapping xmlns="urn:otis-mapping-1.0">
<class name="Otis.Tests.UserDTO, Otis.Tests" source="Otis.Tests.Entity.User, Otis.Tests" >
<member name="Id" />
<member name="Age" />
<member name="UserName" expression="$UserName.ToUpper()" nullValue="[unknown]" />
<member name="FullName" expression="[$FirstName + ' ' + $LastName]" />
<member name="ProjectCount" expression="$Projects.Count" />
<member name="Title" expression="$Gender" >
<map from="Gender.Male" to="Mr." /> <!-- projections -->
<map from="Gender.Female" to="Mrs." />
</member>
<member name="Birthday" expression="$BirthDate" format="Born on {0:D}"/>
<member name="ProjectCount" expression="$Projects.Count" />
<member name="AvgTaskDuration" expression="avg:$Projects/Tasks/Duration" />
<member name="MaxTaskDuration" expression="max:$Projects/Tasks/Duration" />
</class>
para leer los archivos de asignación de la asamblea:
// configure the new Configuration object using metadata of types in the current assembly
Configuration cfg = new Configuration(); // instantiate a new Configuration, one per application is needed
cfg.AddAssembly(Assembly.GetExecutingAssembly()); // initialize it
Hmm, ¿dónde he visto ¿antes de? ;)
Para el beneficio de esta pregunta, ¿por qué está buscando una solución de generación de código estático, que probablemente conducirá a pruebas frágiles, en lugar de una solución de infraestructura de nivel inferior como AutoMapper? – MotoWilliams
Quizás sería apropiado usar un [idioma] (http://ruby-lang.org/) con un fuerte soporte de meta-programación? Herramienta correcta para el trabajo correcto, ¿eh? – stevenharman