Actualización: el enfoque publicado aquí ya no es válido, ya que SelfProfilerse ha eliminado a partir de AutoMapper v2.
Adoptaría un enfoque similar al de Thoai. Pero usaría la SelfProfiler<>clase incorporada para manejar los mapas, luego usaría la Mapper.SelfConfigurefunción para inicializar.
Usando este objeto como fuente:
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public string GetFullName()
{
return string.Format("{0} {1}", FirstName, LastName);
}
}
Y estos como destino:
public class UserViewModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class UserWithAgeViewModel
{
public int Id { get; set; }
public string FullName { get; set; }
public int Age { get; set; }
}
Puede crear estos perfiles:
public class UserViewModelProfile : SelfProfiler<User,UserViewModel>
{
protected override void DescribeConfiguration(IMappingExpression<User, UserViewModel> map)
{
//This maps by convention, so no configuration needed
}
}
public class UserWithAgeViewModelProfile : SelfProfiler<User, UserWithAgeViewModel>
{
protected override void DescribeConfiguration(IMappingExpression<User, UserWithAgeViewModel> map)
{
//This map needs a little configuration
map.ForMember(d => d.Age, o => o.MapFrom(s => DateTime.Now.Year - s.BirthDate.Year));
}
}
Para inicializar en su aplicación, cree esta clase
public class AutoMapperConfiguration
{
public static void Initialize()
{
Mapper.Initialize(x=>
{
x.SelfConfigure(typeof (UserViewModel).Assembly);
// add assemblies as necessary
});
}
}
Agregue esta línea a su archivo global.asax.cs: AutoMapperConfiguration.Initialize()
Ahora puede colocar sus clases de mapeo donde tengan sentido para usted y no preocuparse por una clase de mapeo monolítico.
código de progresión
fuente
Mapper.Initializeen cada clase de configuración sobrescribe los perfiles anteriores agregados? Si es así, ¿qué se debe usar en lugar de Inicializar?Mapper.CreateMap()ahora está obsoleto.'Mapper.Map<TSource, TDestination>(TSource, TDestination)' is obsolete: 'The static API will be removed in version 5.0. Use a MapperConfiguration instance and store statically as needed. Use CreateMapper to create a mapper instance.'. ¿Cómo actualizaría su ejemplo para cumplir con los nuevos requisitos?