I would like to define a mapping (or even a TypeConverter/Resolver) for the following classes:
Destination:
public class Destination
{
public DestinationEnum EnumProperty { get; set; }
public Destination()
{
EnumProperty = DestinationEnum.undefined;
}
}
public enum DestinationEnum
{
oneValue,
anotherValue,
undefined
}
Source:
public enum SourceEnum
{
fu,
ba
}
public enum AnotherSourceEnum
{
first,
second,
third
}
public class Source
{
public SourceEnum SourceEnumVal { get; set; }
}
public class ConcreteSource : Source
{
public AnotherSourceEnum ConcreteSourceEnumVal { get; set; }
}
What would the AutoMapper Mapping look like, if I want to specify a destination value of the DestinationEnum in the Destination class depending on the concrete Source Type?
E.g.
- if the mapper maps from class “Source” to “Destination”, the Destination.EnumProperty should be set to “undefined” if Source.SourceEnumVal == fu
- if the mapper maps from class “source” to “Destination”, the Destination.EnumProperty should be set to “oneValue” if Source.SourceEnumVal == “ba”
- if the mapper maps from class “ConcreteSource” to “Destination”, the Destination.EnumProperty should be set to “oneValue” if ConcreteSource.ConcreteSourceEnumVal == “second”
- if the the mapper maps from class “ConcreteSource” to “Destination”, the Destination.EnumProperty should be set to “undefined” if ConcreteSource.ConcreteSourceEnumVal != “second”
You would create two maps:
Then do a custom resolver for each map:
Your second ConcreteSource map would use a different resolver:
AutoMapper chooses the mapping to use based on both the source and destination type, so the correct resolver will be chosen no matter which of the source types you use.