2012-03-13 21 views
5

Estamos tratando de asignar un objeto - una Tridion de correo electrónico saliente de contacto - que tiene una propiedad de tipo de diccionario personalizado con un constructor interna - ExtendedDetailCollectionMapeo a un tipo personalizado que tiene un constructor interna

Es mapeo fino del objeto en un modelo de vista

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

pero a la inversa no funciona

Hemos tratado:

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

pero eso arroja una excepción de tiempo de ejecución.

Editar: El mensaje de excepción es:

AutoMapper.AutoMapperConfigurationException: configuración personalizada para miembros sólo se admite para los miembros individuales de nivel superior en un tipo.

También hemos probado varios convertidores de tipos y resolución de valores, pero ninguno nos permite acceder al objeto al que se está asignando, que es a lo que tenemos que acceder para asignar el objeto ExtendedDetails.

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

¿Hay un patrón para esto o es más fácil solo usar un método estático?

+0

¿Cuál es la excepción que está recibiendo, es el problema de que AutoMapper no puede instanciar una instancia de ese diccionario? –

+0

Quizás esto ayude. http://stackoverflow.com/questions/9110815/automapper-map-from-one-object-to-nested-objects Usé un Custom Value Resolvers para mapear desde objetos internos. –

+0

@TrevorPilley Sí, ese es el problema. Actualizaré con la excepción ahora. No hay forma de instanciar el diccionario de detalles extendidos directamente y los Value Resolvers esperan crear la clase ellos mismos si se trata de una clase. No puedo encontrar una forma de pasar la propiedad ExtendedDetails como un valor inicial. –

Respuesta

1

Si ExtendedDetails es una clase, necesita crear el mapa para esta clase y luego la propiedad individual como Nombre de la clase.

+0

Gracias por su respuesta, pero lo hemos intentado y no funciona debido al constructor interno. –

+0

Supongo que deberías pedirle a Tridion que cambie la visibilidad de ese constructor, o crear algún tipo de envoltorio alrededor del constructor al que puedas llamar. –

+0

@Ram, podemos convencerte de que te comprometas con la propuesta de sitio de Tridion SE, tu ayuda será apreciada http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2 –

Cuestiones relacionadas