2012-03-13 12 views
5

Stiamo cercando di mappare un oggetto - un Tridion in uscita e-mail di contatto - che ha un tipo di proprietà dizionario personalizzato con un costruttore interna - ExtendedDetailCollectionMapping ad un tipo personalizzato che ha un costruttore interna

E 'mappatura fine dall'oggetto su un ViewModel

Mapper.CreateMap<Contact,ContactViewModel>() 
    .ForMember(x=>x.Name, m=>m.MapFrom(x=>x.ExtendedDetails["Name"].StringValue)) 

ma il contrario non funziona

Abbiamo cercato:

Mapper.CreateMap<ContactViewModel,Contact>() 
    .ForMember(x=>x.ExtendedDetails["Name"].Value, m => m.MapFrom(x=>x.Name)); 

ma che genera un'eccezione di runtime.

Edit: Il messaggio di eccezione è:

AutoMapper.AutoMapperConfigurationException: configurazione personalizzata per membri è supportato solo per alto livello singoli membri su un tipo.

Abbiamo anche provato i vari convertitori di tipi e risolutori di valore, ma nessuno ci permettono di ottenere l'oggetto viene mappato, che è quello che abbiamo bisogno di ottenere l'accesso al fine di mappare i ExtendedDetails oggetto.

Mapper.CreateMap<ContactViewModel,Contact>() 
    .ForMember(x=>x.ExtendedDetails, m => ????); 

Esiste uno schema per questo o è più semplice utilizzare un metodo statico?

+0

Qual è l'eccezione che si ottiene, è il problema che AutoMapper non è in grado di istanziare un'istanza di quel dizionario? –

+0

Forse questo aiuterà. http://stackoverflow.com/questions/9110815/automapper-map-from-one-object-to-nested-objects Ho utilizzato un valore personalizzato Resolver per mappare da oggetti interni. –

+0

@TrevorPilley Sì, questo è il problema. Aggiornerò con l'eccezione ora. Non c'è modo di creare un'istanza diretta del dizionario dettagliato e Value Resolver si aspetta di creare la classe da sé se si tratta di una classe. Non riesco a trovare un modo per passare la proprietà ExtendedDetails come valore iniziale. –

risposta

1

Se ExtendedDetails è una classe, è necessario creare Map per questa classe e quindi proprietà individuali come Nome della classe.

+0

Grazie per la tua risposta, ma l'abbiamo provato e non funziona a causa del costruttore interno. –

+0

Immagino che dovresti chiedere a Tridion di cambiare la visibilità di quel costruttore, o creare una specie di wrapper attorno a quel costruttore che saresti in grado di chiamare. –

+0

@Ram, potremmo convincerti a impegnarti nella proposta del sito di Tridion SE, il tuo aiuto sarà apprezzato http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2 –

Problemi correlati