Mapster
Apparence
Links
Mapping
// create destination from data from source var destination = source.Adapt<Destination>(); // update destination with data from source source.Adapt(destination); |
Configuration
// global config
TypeAdapterConfig.GlobalSettings.Default.IgnoreNullValues(true);
// config the mapping from Item to ItemDto
TypeAdapterConfig<Item, ItemDto> // src, dest
.NewConfig() // create new map config (overwrite existing ones)
.ForType() // OR create a map config if no one exists, otherwise append to th existing one
.Ignore(dest => dest.Prop1) // do not map Prop1
.Map(dest => dest.Prop2, src => $"{0} {1}", src.Prop2, src.Prop3)); // custom mapping for Prop2
|
IRegister
| Program.cs |
// scan the assembly to load the classes implementing IRegister TypeAdapterConfig.GlobalSettings.Scan(typeof(ItemMappingRegister).Assembly); // load only on register var register = new ItemMappingRegister(); var config = new TypeAdapterConfig(); config.Apply(register); |
| MappingRegisters/ItemMappingRegister.cs |
public class ItemMappingRegister : IRegister
{
public void Register(TypeAdapterConfig config) => config.NewConfig<CreateUpdateItemRequest, Item>();
}
|
Dependency Injection
Useful if
|
dotnet add package Mapster.DependencyInjection |
| Program.cs |
var config = new TypeAdapterConfig(); config.Scan(typeof(ItemMappingRegister).Assembly); config.Compile(); services.AddSingleton(config); services.AddScoped<IMapper, ServiceMapper>(); |
| MappingRegisters/ItemMappingRegister.cs |
public class ItemMappingRegister : IRegister
{
public void Register(TypeAdapterConfig config)
=> config
.NewConfig<ItemDto, Item>()
.Map(dest => dest.Id, src => MapContext.Current.GetService<SomeService>().Do(src.Id));
}
|
| MyService.cs |
public class MyService(IMapper mapper)
{
public void Do()
{
var itemDto = mapper.Map<ItemDto>(item);
}
}
|
Installation
dotnet add package Mapster |