Sto cercando un modo per Automapper di selezionare il tipo di destinazione di una chiamata da mappare, in base a un valore Enum impostato nel tipo di origine.Automapper risolve il tipo di destinazione in base al valore di un'enumerazione nel tipo di fonte
ad es. Date le seguenti classi:
public class Organisation
{
public string Name {get;set;}
public List<Metric> Metrics {get;set;}
}
public class Metric
{
public int NumericValue {get;set;}
public string TextValue {get;set;}
public MetricType MetricType {get;set;}
}
public enum MetricType
{
NumericMetric,
TextMetric
}
Se ho il seguente oggetto:
var Org = new Organisation {
Name = "MyOrganisation",
Metrics = new List<Metric>{
new Metric { Type=MetricType.TextMetric, TextValue = "Very Good!" },
new Metric { Type=MetricType.NumericMetric, NumericValue = 10 }
}
}
Ora, voglio mappare questo a ad una rappresentazione ViewModel di essa che ha le classi:
public class OrganisationViewModel
{
public string Name {get;set;}
public List<IMetricViewModels> Metrics {get;set;}
}
public NumericMetric : IMetricViewModels
{
public int Value {get;set;}
}
public TextMetric : IMetricViewModels
{
public string Value {get;set;}
}
La chiamata a AutoMapper.Map comporterà un OrganisationViewModel contenente un NumericMetric e un TextMetric.
L'Automapper chiamata:
var vm = Automapper.Map<Organisation, OrganisationViewModel>(Org);
Come potrei fare per Configurazione Automapper a sostegno di questa? È possibile? (Spero che questa domanda sia chiara)
Grazie!
Continuo a guardare questo e continuo a tornare a 'Metric' invece di due tipi. Ad esempio, come avete sia "int Value" che "string Value" entrambi implementano IMetricViewModels. Com'è la tua interfaccia? –
hometoast
Ciao, L'esempio è molto più semplice del problema reale, ci sono molti tipi diversi in MetricType che contengono tutti cose diverse. L'interfaccia è vuota e solo lì per permettermi di avere un elenco di cose che verranno tutte risolte in modelli di visualizzazione diversi. (MVC app ... Html.DisplayFor (Organisation.Metrics) genererà un elenco di 6 o 7 modelli diversi). Ha senso o dovrei espandere la domanda? – Paul