AutoMapper - как передать параметры в пользовательский распознаватель с помощью метода ConstructedBy?

в моем ASP.NET проект MVC 2 (RC) - я использую AutoMapper для сопоставления между классом Linq to Sql (Media) и моделью представления (MediaVM). Модель представления имеет свойство SelectList для раскрывающегося списка в представлении. У меня есть пользовательский преобразователь значений для заполнения элементов свойств SelectList из БД, но мне интересно, есть ли способ передать пару значений из исходной модели в преобразователь (используя метод ConstructedBy?) а) определить выбранный элемент и Б) отфильтровать элементы из БД. Этот исходный объект передается в пользовательский преобразователь-но преобразователь используется на нескольких разных моделях представления с разными типами исходных объектов, поэтому лучше определить, откуда получить значения в моей конфигурации сопоставления. Вот моя модель представления:

public class MediaVM
{
    public bool Active { get; set; }
    public string Name { get; set; }

    [UIHint("DropDownList")]
    [DisplayName("Users")]
    public SelectList slUsers { get; private set; }
}        

конфигурация отображения automapper:

    Mapper.CreateMap<Media, MediaVM>()
        .ForMember(dest => dest.slUsers, opt => opt.ResolveUsing<UsersSelectListResolver>());

было бы неплохо иметь возможность сделать что-то подобное на .Предложение отображения ForMember:

.ConstructedBy(src => new UsersSelectListResolver(src.UserID, src.FilterVal))

есть ли способ сделать это?

2 ответов


Я нашел ваше сообщение, пытаясь сделать то же самое. Решил по простому подход и пропустить по моему выбор список напрямую через AutoMaper. Я просто возвращаю массив в мою ViewModel и ссылаюсь на этот объект для моего списка выбора. Массив сопоставляется, объект select list-нет. Просто, эффективно. И, IMHO каждый делает это предназначенная задача-карты картографа, ViewModel делает макет

View Model code:
        [DisplayName("Criterion Type")]
        public virtual CriterionType[] CriterionTypes { get; set; }

        [DisplayName("Criterion Type")]
        public SelectList CriterionTypeList
        {
            get
            {
                return new SelectList(CriterionTypes, "Id", "Key");
            }
        }  

мой маппер:

 Mapper.CreateMap<Criterion, CriterionForm>()
            .ForMember(dest => dest.CriterionTypeList, opt => opt.Ignore());     

Мне нравится эта идея как функция запроса. Вы можете сделать нечто подобное сейчас, с MapFrom:

ForMember(dest => dest.slUsers, opt => opt.MapFrom(src => new UsersSelectListResolver(src).Resolve(src));