INTRODUCCIÓN · MAPPEReQuantic.MappereQuantic.Mapper convierte un objeto en otro sin reflexión: el código de mapeo se genera al compilar, así que lo que se ejecuta es el código que habría escrito a mano.
Resumen
Resuelve mapeos de propiedades complejos, agregaciones y transformaciones propias, todo mediante generadores de código Roslyn en lugar de en tiempo de ejecución.La agregación de propiedades, la comprobación de tipos al compilar, la configuración por atributo y el soporte de inyección de dependencias vienen de serie.
Instalar
shell
dotnet add package eQuantic.Mapper
Qué hace
Sin reflexiónCada mapeo se genera al compilar, mediante un generador de código Roslyn.
Agregación de propiedadesCombine varias propiedades de origen en una sola de destino, con más de una docena de tipos de agregación.
Seguridad de tiposLos tipos se comprueban al compilar, así que una discrepancia es un error de compilación y no una sorpresa en producción.
Rápido por construcciónCódigo generado con la menor asignación posible, con la forma que el JIT necesita para poder integrarlo.
Configuración por atributoEl mapeo se declara donde está la propiedad, y no hay código repetitivo que mantener al día con ella.
Mapeo asíncronoSoporte asíncrono completo, con token de cancelación incluido.
Sin reflexiónCada mapeo se genera al compilar, mediante un generador de código Roslyn.
Agregación de propiedadesCombine varias propiedades de origen en una sola de destino, con más de una docena de tipos de agregación.
Seguridad de tiposLos tipos se comprueban al compilar, así que una discrepancia es un error de compilación y no una sorpresa en producción.
Rápido por construcciónCódigo generado con la menor asignación posible, con la forma que el JIT necesita para poder integrarlo.
Configuración por atributoEl mapeo se declara donde está la propiedad, y no hay código repetitivo que mantener al día con ella.
Mapeo asíncronoSoporte asíncrono completo, con token de cancelación incluido.
Inicio rápido
Declarar los modelos — La propiedad de destino dice de dónde viene, y cómo se combinan en ella varios orígenes.
C#
public class UserSource{ public string FirstName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty; public decimal Salary { get; set; } public decimal Bonus { get; set; }} public class UserDestination{ [MapFrom(typeof(UserSource), new[] { nameof(UserSource.FirstName), nameof(UserSource.LastName) }, MapperPropertyAggregation.ConcatenateWithSpace)] public string FullName { get; set; } = string.Empty; [MapFrom(typeof(UserSource), new[] { nameof(UserSource.Salary), nameof(UserSource.Bonus) }, MapperPropertyAggregation.Sum)] public decimal TotalIncome { get; set; }}
Generar el mapper — Un atributo en una clase parcial, y el generador escribe el mapeo.
C#
[Mapper(typeof(UserSource), typeof(UserDestination))]public partial class UserMapper : IMapper{} var builder = WebApplication.CreateBuilder(args);builder.Services.AddMappers(); var mapper = mapperFactory.GetMapper<UserSource, UserDestination>()!;var result = mapper.Map(userSource);
Agregar varios orígenes — El mismo atributo admite una agregación distinta para cada caso.
C#
public class PersonDestination{ [MapFrom(typeof(PersonSource), new[] { nameof(PersonSource.FirstName), nameof(PersonSource.LastName) }, MapperPropertyAggregation.ConcatenateWithSpace)] public string FullName { get; set; } = string.Empty; [MapFrom(typeof(PersonSource), new[] { nameof(PersonSource.Salary), nameof(PersonSource.Bonus) }, MapperPropertyAggregation.Sum)] public decimal TotalIncome { get; set; } [MapFrom(typeof(PersonSource), new[] { nameof(PersonSource.Salary), nameof(PersonSource.Bonus) }, MapperPropertyAggregation.Max)] public decimal HighestComponent { get; set; }}
Superficie pública
NAMESPACE
SUPERFICIE PÚBLICA
MapFromAttribute
Declara de dónde viene el valor de una propiedad de destino, y cómo se agregan los orígenes.
MapperAttribute
Marca la clase parcial que el generador debe rellenar con un mapeo entre dos tipos.
MapperPropertyAggregation
Los tipos de agregación: ninguno, concatenar, suma, máximo, mínimo, promedio y más.
¿Prefieres leer código?
Todos los paquetes son MIT y públicos, y los ejemplos son para copiar y pegar.
¿Listo para entregar algo real?
Agenda 30 minutos de conversación. Te decimos en la misma hora si somos el socio adecuado — o quién lo es.
¿Listo para entregar algo real?
Agenda 30 minutos de conversación. Te decimos en la misma hora si somos el socio adecuado — o quién lo es.
© 2026 eQuantic Tech. Todos los derechos reservados.