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?
¿Cuál es la excepción que está recibiendo, es el problema de que AutoMapper no puede instanciar una instancia de ese diccionario? –
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. –
@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. –