Как настроить AutoMapper для обработки преобразования типа только в конкретном сценарии c? - PullRequest
1 голос
/ 14 июля 2020

У меня есть следующие объекты:

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).

Возможно ли это, и если да, то как?

1 Ответ

0 голосов
/ 14 июля 2020

 var d = new Dictionary<string, int>();
            d.Add("COMPUTER", 1);
            d.Add("SAYSNO", 2);
            var t1 = from k in d
                     select new
                     {
                         values = DomainDataAccessEnumConverter.Map(k.Key)
                     };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...