2010-08-04 17 views
8

¿Es posible configurar AutoMapper para devolver una nueva instancia del tipo de destino si el objeto de origen es nulo?AutoMapper: crear instancia de tipo de destino si fuente == nulo

Source source = null; 
Dest d1 = AutoMapper.Mapper.Map<Source, Dest>(source); 
// d1 == null 

// I'm looking for a way to configure AutoMapper to 
// eliminate this code: 
Dest d2 = AutoMapper.Mapper.Map<Source, Dest>(source) ?? new Dest(); 
+0

lo envuelve en un método o algo – Omu

Respuesta

15

responder a mi propia pregunta (parcialmente):

AutoMapper tiene una propiedad de configuración llamado AllowNullDestinationValues que se fija para true por defecto. Al establecer este a false, consigo el comportamiento mostrado en la pregunta, por ejemplo:

Mapper.Configuration.AllowNullDestinationValues = false; 

//... 

Source source = null; 
Dest d = AutoMapper.Mapper.Map<Source, Dest>(source); 
// d is now a new instance of Dest 

Esta solución funciona bien para los tipos simples, en los tipos de origen y destino mapa bien. Todavía tengo algunos problemas con las asignaciones complejas (actualizaré la pregunta para mostrar un ejemplo).

2

También se puede utilizar para reemplazar .NullSubstitute() valor NULL a algún valor de cualquier propiedad en AutoMapper, por ejemplo .:

CreateMap<SMModel, VM_SMModel>() 
        .ForMember(d => d.myDate, o => o.NullSubstitute(new DateTime(2017,12,12))); 
Cuestiones relacionadas