visual una tipo studio resultado puede proyecto programa para librerias libreria iniciar hacer directamente crear con como clases clase biblioteca c# automapper automapper-2 automapper-3

c# - una - ¿Cómo configurar el mapeador automático en el proyecto de biblioteca de clases?



no se puede iniciar directamente un proyecto con un tipo de resultado de biblioteca de clase c# (3)

Nadie fuera de tu biblioteca tiene que configurar AutoMapper

Le recomiendo que use el enfoque basado en instancia usando un IMapper . De esa manera, nadie fuera de tu biblioteca tiene que llamar a ningún método de configuración. Puede definir un MapperConfiguration y crear el asignador desde allí todo dentro de la biblioteca de clases.

var config = new MapperConfiguration(cfg => { cfg.AddProfile<AppProfile>(); cfg.CreateMap<Source, Dest>(); }); IMapper mapper = config.CreateMapper(); // or IMapper mapper = new Mapper(config); var dest = mapper.Map<Source, Dest>(new Source());

Estoy usando el mapeo automático por primera vez.

Estoy trabajando en la aplicación c # y quiero usar el mapeador automático.

(Solo quiero saber cómo usarlo, así que no tengo la aplicación asp.net ni la aplicación MVC).

Tengo tres proyectos de biblioteca de clase.

Quiero escribir el proceso de transferencia en el proyecto de servicio.

¿Entonces quiero saber cómo y dónde debo configurar el Mapeador automático?


Así que, basándome en la respuesta de Bruno aquí y en 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 se basa en el consumidor de la biblioteca para configurar los mapeos en el proyecto principal:

public static class Mapping { private static readonly Lazy<IMapper> Lazy = new Lazy<IMapper>(() => { var config = new MapperConfiguration(cfg => { // This line ensures that internal properties are also mapped over. cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly; cfg.AddProfile<MappingProfile>(); }); var mapper = config.CreateMapper(); return mapper; }); public static IMapper Mapper => Lazy.Value; } public class MappingProfile : Profile { public MappingProfile() { CreateMap<Source, Destination>(); // Additional mappings here... } }

Luego, en su código, donde necesita asignar un objeto a otro, simplemente puede hacer:

var destination = Mapping.Mapper.Map<Destination>(yourSourceInstance);

NOTA: Este código se basa en AutoMapper 6.2 y puede 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<MyMappings>(); }); } } 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(); }