Сопоставление свойства с элементом коллекции

Я просачивался через документацию AutoMapper, чтобы попытаться найти рекомендуемое решение для этого, но не смог его найти.

Скажем, у меня есть класс, подобный следующему

public class Foo
{
    public string Note { get; set; }
}

этот класс заполняется из клиента и сопоставляется со следующим классом объектов домена

public class Bar
{
    public IList<Note> Notes { get; set; }
}

где Примечание

public class Note
{
    public string Text { get; set; }

    // other properties excluded for brevity
}

Я хотел бы сопоставить свойство строки Note на Foo, прежде всего с атрибутом Text в новом экземпляре Note, а затем добавить, что Note в коллекцию Notes на Bar. Я использую ValueResolver для выполнения первой части этой операции (сопоставление строки с новым экземпляром Note), но я не уверен, как обойти вторую часть (сопоставление этого элемента с элементом в сбор).

Какой самый чистый способ сделать это?

Ответы

Ответ 1

Я думаю, что что-то вроде этого должно работать (не проверено - просто печатайте вслух):

Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes,
    opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } });

ИЗМЕНИТЬ

Вы также можете использовать функции AutoMappers AfterMap. Эта лямбда будет выполнена после того, как Automapper выполнил бы ее регулярные сопоставления:

.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note }));