No olvides que en las ciencias cualquier problema casi siempere puede tener más de una resoluciones, no obstante nosotros te enseñaremos lo mejor y más eficiente.
Solución:
Entonces, según la respuesta de Bruno aquí y la publicación de John Skeet sobre singletons, se me ocurrió la siguiente solución para que esto se ejecute solo una vez y esté completamente aislado en la biblioteca de clases, a diferencia de la respuesta aceptada que depende del consumidor de la biblioteca para configurar las asignaciones en el proyecto principal:
public static class Mapping
private static readonly Lazy Lazy = new Lazy(() =>
var config = new MapperConfiguration(cfg => );
var mapper = config.CreateMapper();
return mapper;
);
public static IMapper Mapper => Lazy.Value;
public class MappingProfile : Profile
public MappingProfile()
CreateMap
Luego, en su código, donde necesita asignar un objeto a otro, puede hacer lo siguiente:
var destination = Mapping.Mapper.Map(yourSourceInstance);
NOTA: Este código se basa en AutoMapper 6.2 y podría requerir algunos ajustes para versiones anteriores de AutoMapper.
Puede colocar la configuración en cualquier lugar:
public class AutoMapperConfiguration
public static void Configure()
Mapper.Initialize(x =>
x.AddProfile();
);
public class MyMappings : Profile
{
public override string ProfileName
get return "MyMappings";
protected override void Configure()
......
Pero tiene que ser llamado por la aplicación usando las bibliotecas en algún momento:
void Application_Start()
AutoMapperConfiguration.Configure();
Nadie fuera de su biblioteca tiene que configurar AutoMapper
Le recomiendo que use el enfoque basado en instancias usando un IMapper
. De esa manera, nadie fuera de su biblioteca tiene que llamar a ningún método de configuración. Puede definir un MapperConfiguration
y cree el mapeador desde allí, todo dentro de la biblioteca de clases.
var config = new MapperConfiguration(cfg =>
cfg.AddProfile();
cfg.CreateMap