AutoMapper - Как передать параметры в Пользовательское использование Сопоставителя метод ConstructedBy?

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

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

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

Конфигурация отображения автокартопостроителя:

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

Было бы хорошо смочь сделать что-то вроде этого на.ForMember отображающийся пункт:

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

Существует ли способ выполнить это?

6
задан Bryan 15 January 2010 в 17:36
поделиться

2 ответа

Я нашел вашу публикацию, пытаясь сделать то же самое. Я решил простым подходом и пропустить попытку отображать в мой список выбора напрямую через Autommer. Я просто возвращаю массив в свой ViewModel и ссылаюсь на этот объект для моего списка выбора. Массив становится сопоставленным, выберите «Список». Простой, эффективный. И, ИМХО каждый делает это предполагаемое задание - Mapper Maps, 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");
            }
        }  

My Mapper:

 Mapper.CreateMap<Criterion, CriterionForm>()
            .ForMember(dest => dest.CriterionTypeList, opt => opt.Ignore());     
2
ответ дан 10 December 2019 в 00:38
поделиться

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

ForMember(dest => dest.slUsers, opt => opt.MapFrom(src => new UsersSelectListResolver(src).Resolve(src));
8
ответ дан 10 December 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: