EmitMapper: eliminiamo le stringhe dalla configurazione
supponendo di voler mappare un modello come quello esposto avete bisogno di spiegare al mapper che la proprietà “Name” deve essere mappata su “FullName” del tipo di destinazione. EmitMapper offre questa funzionalità attraverso il metodo MatchMembers esposto dal motore di configurazione:
metodo decisamente prolisso e prono ad errori perché usa le stringhe per identificare le proprietà, ergo non siete molto refactoring-friendly. Perché quindi non esprimere la stessa cosa così:var mapper = ObjectMapperManager.DefaultInstance.GetMapper<SourceClass, DestinationClass>
(
new MappingConfiguration()
.MatchMembers( ( s, d ) =>
{
if( s == "Name" && d == "FullName" )
{
return true;
}
return s == d;
})
);
Sfruttiamo l’espressività delle Lambda Expression per definire il match tra le proprietà, internamente poi non facciamo altro che rimappare il tutto sul metodo esposto da EmitMapper, semplice, potente, intuitivo, refactoring-friendly e con il supporto per l’intellisense il che non fa schifo proprio a nessuno credo…var mapper = ObjectMapperManager.DefaultInstance.GetMapper<SourceClass, DestinationClass>
(
new MappingConfiguration()
.MatchMembers<SourceClass, DestinationClass>( m =>
{
m.Match( s => s.Name, d => d.FullName );
} )
);
.m