The AutoMapper.Extensions.EnumMapping library gives you control about your enum values mappings. It is possible to create a custom type converter for every enum.
This library supports mapping enums values like properties.
- AutoMapper (from version 10.0)
You should install AutoMapper.Extensions.EnumMapping with NuGet:
Install-Package AutoMapper.Extensions.EnumMapping
Or via the .NET Core command line interface:
dotnet add package AutoMapper.Extensions.EnumMapping
Either commands, from Package Manager Console or .NET Core CLI, will download and install AutoMapper.Extensions.EnumMapping. AutoMapper.Extensions.EnumMapping has no dependencies.
Install via NuGet first:
Install-Package AutoMapper.Extensions.EnumMapping
To use it:
For method CreateMap
this library provide a ConvertUsingEnumMapping
method. This method add all default mappings from source to destination enum values.
If you want to change some mappings, then you can use MapValue
method. This is a chainable method.
Default the enum values are mapped by value, but it is possible to map by name calling MapByName()
or MapByValue()
.
using AutoMapper.Extensions.EnumMapping;
public enum Source
{
Default = 0,
First = 1,
Second = 2
}
public enum Destination
{
Default = 0,
Second = 2
}
internal class YourProfile : Profile
{
public YourProfile()
{
CreateMap<Source, Destination>()
.ConvertUsingEnumMapping(opt => opt
// optional: .MapByValue() or MapByName(), without configuration MapByValue is used
.MapValue(Source.First, Destination.Default))
.ReverseMap(); // to support Destination to Source mapping, including custom mappings of ConvertUsingEnumMapping
}
}
...
AutoMapper provides a nice tooling for validating typemaps. This library adds an extra EnumMapperConfigurationExpressionExtensions.EnableEnumMappingValidation
extension method to extend the existing AssertConfigurationIsValid()
method to validate also the enum mappings.
To enable testing the enum mapping configuration:
public class MappingConfigurationsTests
{
[Fact]
public void WhenProfilesAreConfigured_ItShouldNotThrowException()
{
// Arrange
var config = new MapperConfiguration(configuration =>
{
configuration.EnableEnumMappingValidation();
configuration.AddMaps(typeof(AssemblyInfo).GetTypeInfo().Assembly);
});
// Assert
config.AssertConfigurationIsValid();
}
}