У меня есть следующие объекты:
public enum DomainEnum
{
FooFoo = 1,
BarBaz,
}
public class DomainEntity
{
public DomainEnum DomainEnum { get; set; }
}
public class DataAccessEntity
{
public string ActuallyAnEnum { get; set; }
}
public static class DomainDataAccessEnumConverter
{
public static string Map(DomainEnum domainEnum)
{
switch (domainEnum)
{
case DomainEnum.FooFoo: return "COMPUTER";
case DomainEnum.BarBaz: return "SAYSNO";
default: throw ...
}
}
public static DomainEnum Map(string domainEnumString)
{
switch (domainEnumString.ToUpper())
{
case "COMPUTER": return DomainEnum.FooFoo;
case "SAYSNO": return DomainEnum.BarBaz;
default: throw ...
}
}
}
Я настроил AutoMapper, чтобы эти объекты автоматически преобразовывались между собой:
CreateMap<string, DomainEnum>()
.ConvertUsing(s => DomainDataAccessEnumConverter.Map(s));
CreateMap<DomainEnum, string>()
.ConvertUsing(d => DomainDataAccessEnumConverter.Map(d));
CreateMap<DataAccessEntity, DomainEntity>()
.ReverseMap();
Теперь это позволяет неявное преобразование между string
и DomainEnum
из любой точки приложения. Однако не имеет смысла выполнять это преобразование в любом контексте, кроме как при сопоставлении между DataAccessEntity
и DomainEntity
, поэтому я бы предпочел, чтобы это сопоставление использовалось только в этом сценарии - для всего остального мне нужен стандартный . NET преобразования должны произойти (и вызвать исключение в случае string
в DomainEnum
).
Возможно ли это, и если да, то как?