2015-11-27 12 views
8

ho qualche codice di mappatura come segueIn automapper è possibile applicare lo stesso valore resolver a più membri

Mapper.CreateMap<CalculationQueryResult, CalculationViewModel>() 
     .ForMember(poco => poco.NomineeFee, 
        opt => opt.ResolveUsing<FormattedCurrencyInt>() 
     .FromMember(m => m.NomineeFee)) 

     .ForMember(poco => poco.TotalContributions, 
        opt => opt.ResolveUsing<FormattedCurrencyInt>() 
     .FromMember(m => m.TotalContributions)) 

     .ForMember(poco => poco.EquityInjection, 
        opt => opt.ResolveUsing<FormattedCurrencyInt>() 
     .FromMember(m => m.EquityInjection)) 

    // ... SNIP Lots more members mapped with Formatted Currency Resolver 

Come potete vedere sto mappando più membri che utilizzano lo stesso risolutore per convertire un numero intero in una valuta formattato stringa. Lo sto facendo per la stragrande maggioranza ma non tutti i membri della mia scarsa classe.

Tutti questi membri eseguiranno il mapping utilizzando la mappatura basata sulla convenzione se non fosse necessario continuare a ripetere questi tipi. È una quantità enorme di codice da scrivere per un compito semplice.

Esiste un modo per sovrascrivere il comportamento predefinito per la conversione di un int in una stringa per una singola mappa e quindi fare personalizzato. Per membri dove voglio qualcosa di diverso. Come ad esempio questo:

Mapper.CreateMap<CalculationQueryResult, CalculationViewModel>() 
      .SetDefault<int,string>(opt => opt.ResolveUsing<FormattedCurrencyInt>()) 
      .ForMember(poco => poco.Count, x=>x.MapFrom(s => s.Count.ToString())); 

risposta

-1

Non è possibile applicare lo stesso resolver di valori a più membri nel modo descritto.

Può sovrascrivere il mapping predefinito da int a stringa per tutti i mapping, come suggerito da Georg Patscheider ma è probabile che abbia effetti collaterali peggiori rispetto al problema originale.

Dovrai scrivere la mappatura riga per riga.

+1

Utilizza il link di modifica nella tua domanda per aggiungere ulteriori informazioni. Il pulsante Post risposta deve essere utilizzato solo per risposte complete alla domanda. - [Dalla recensione] (/ recensione/post di bassa qualità/10488443) –

+0

A volte la risposta è "non è possibile". Questa risposta non aggiunge nulla di più alla mia domanda. L'altra risposta offerta non risponde nemmeno alla mia domanda. – Twisted

+1

Allora perché hai postato la risposta se non aggiungeva nulla? Alcuni di noi qui esamineranno le risposte di bassa qualità e fare commenti su di loro. Questo è parte di come funziona questo sito in cui suggerirei di inserire qualche spiegazione o giustificazione sul motivo per cui pensi che altrimenti sarebbe solo un'opinione e tutti ne avranno uno. "Penso di poter volare" sarebbe qualcosa che potrei affermare e senza aggiungere altro potrebbe essere vero o falso. Se sono in elicottero o in aereo, allora potrei volare bene mentre se provassi a sbattere le braccia per volare che non funzionerebbe così bene è il perché. –

4

È possibile creare la mappatura di default come

Mapper.CreateMap<int, string>().ConvertUsing<FormattedCurrencyIntConverter>(); 

private class FormattedCurrencyIntConverter : TypeConverter<int, string> { 
    protected override string ConvertCore(int numericValue) { 
     return numericValue.ToString("C2"); // format here ... 
    } 
} 

Ma attenzione che questa regola di mappatura verrà applicata per tutti gli interi! Sovrascrivere questa regola per alcuni membri è probabilmente possibile, ma non l'ho provato.

PS: raccomando di scrivere tutte le regole di mappatura in modo esplicito e non fare affidamento su mappature basate su convenzioni. Se una proprietà viene rinominata solo su un lato, il mapping basato su convenzione si interrompe, ma una regola esplicita può essere rifatta automaticamente dall'IDE.

+1

Grazie per aver postato una risposta, come dici tu applicherà la conversione a tutte le mappe che non mi aiutano veramente. Voglio applicarlo a una mappa specifica. – Twisted

Problemi correlati