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