INTRODUÇÃO · MAPPEReQuantic.MapperO eQuantic.Mapper converte um objeto em outro sem reflexão: o código de mapeamento é gerado na compilação, pelo que o que corre é o código que teria escrito à mão.
Visão geral
Resolve mapeamentos de propriedades complexos, agregações e transformações próprias, tudo através de geradores de código Roslyn em vez de em tempo de execução.A agregação de propriedades, a verificação de tipos na compilação, a configuração por atributo e o suporte a injeção de dependências vêm de origem.
Instalar
shell
dotnet add package eQuantic.Mapper
O que faz
Sem reflexãoCada mapeamento é gerado na compilação, por um gerador de código Roslyn.
Agregação de propriedadesCombine várias propriedades de origem numa só de destino, com mais de uma dezena de tipos de agregação.
Segurança de tiposOs tipos são verificados na compilação, pelo que uma discrepância é um erro de compilação e não uma surpresa em produção.
Rápido por construçãoCódigo gerado com a menor alocação possível, com a forma de que o JIT precisa para o poder integrar.
Configuração por atributoO mapeamento é declarado onde está a propriedade, e não há código repetitivo para manter a par dela.
Mapeamento assíncronoSuporte assíncrono completo, com token de cancelamento incluído.
Sem reflexãoCada mapeamento é gerado na compilação, por um gerador de código Roslyn.
Agregação de propriedadesCombine várias propriedades de origem numa só de destino, com mais de uma dezena de tipos de agregação.
Segurança de tiposOs tipos são verificados na compilação, pelo que uma discrepância é um erro de compilação e não uma surpresa em produção.
Rápido por construçãoCódigo gerado com a menor alocação possível, com a forma de que o JIT precisa para o poder integrar.
Configuração por atributoO mapeamento é declarado onde está a propriedade, e não há código repetitivo para manter a par dela.
Mapeamento assíncronoSuporte assíncrono completo, com token de cancelamento incluído.
Início rápido
Declarar os modelos — A propriedade de destino diz de onde vem, e como nela se combinam várias origens.
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; }}
Gerar o mapper — Um atributo numa classe parcial, e o gerador escreve o mapeamento.
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 várias origens — O mesmo atributo aceita uma agregação diferente 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; }}
Superfície pública
NAMESPACE
SUPERFÍCIE PÚBLICA
MapFromAttribute
Declara de onde vem o valor de uma propriedade de destino, e como as origens se agregam.
MapperAttribute
Marca a classe parcial que o gerador deve preencher com um mapeamento entre dois tipos.
MapperPropertyAggregation
Os tipos de agregação: nenhum, concatenar, soma, máximo, mínimo, média e mais.
Prefere ler código?
Todos os pacotes são MIT e públicos, e os exemplos são para copiar e colar.
Pronto para entregar algo de verdade?
Agende 30 minutos de conversa. Dizemos na mesma hora se somos o parceiro certo — ou quem é.
Pronto para entregar algo de verdade?
Agende 30 minutos de conversa. Dizemos na mesma hora se somos o parceiro certo — ou quem é.
© 2026 eQuantic Tech. Todos os direitos reservados.