Правило Automapper для пользовательского типа свойства - PullRequest
0 голосов
/ 08 октября 2018

Итак, у меня есть этот класс TranslatedString: ListDictionary

public class TranslatedString {
    public string Language {get;set}

    public string Value {
        get {
            return this[Language] as string;
        }
        set {
            this[Language] = value;
        }
    }
    ....more complex logic in this class
}

и класс назначения, который выглядит следующим образом:

{
    public TranslatedString Name {get;set;}
    public TranslatedString Desc {get;set;}

    public void SetLanguage(string lang) {
       this.Name.Language = lang;
       this.Desc.Language = lang;
    }
}

Теперь я хочу сопоставить подобный источник с пунктом назначениявыше:

{
    public string Language {get;set;}
    public string Name {get;set;}
    public string Desc {get;set;}
}

Вот моя карта:

CreateMap<String, TranslatedString>(MemberList.None)
  .ForMember(x => x.Value, o => o.MapFrom(s => s));

CreateMap<Source, Dest>(MemberList.Source)
  .BeforeMap((s, d, context) {
      d.SetLanguage((string)context.Items["Language"]);
  });

и вот как я отображаю:

var dest = Mapper.Map<Dest>(source, opt => opt.Items["Language"] = "en");

У меня есть проблема в том, что когда Autopper отображает строку => TranslatedString создает новый экземпляр каждой TranslatedString, что означает, что «Language», установленный в «BeforeMap», теряет свое значение.Как решить эту проблему и сохранить общее решение для всех отображений String => TranslatedString для всех классов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...