Это сводит меня с ума ... Я пытался передать переменную в собственный распознаватель, но это кажется невозможным.
В настоящее время я использую следующий подход, но значение, которое передается в конструктор пользовательских резольверов, всегда представляет собой пустую строку "", хотя я специально регистрирую новое отображение для перезаписи существующего (см. Контроллер)
Пользовательский резольвер
public class DueDateResolver : ValueResolver<Task, string>
{
public string DateFormat = "MMM dd, @ h:mm tt";
public DueDateResolver(string dateFormat)
{
// If no date format is passed use the default
if (!String.IsNullOrEmpty(dateFormat))
{
DateFormat = dateFormat;
}
}
}
Контроллер
// <summary>
/// Ajax Method for filtering tasks by Date Range
/// </summary>
/// <param name="dateFilter">The date filter label ["Day", "Week", "Month", "All", "Last 30 Days"]</param>
/// <returns>List of task objects</returns>
[HttpGet]
public JsonResult GetTasksByDateRange(DateFilters dateFilter)
{
RegisterMaps.RegisterTaskViewModel(dateFilter.ToString());
List<Task> tasks = taskService.GetFilteredTasksByDate(dateFilter, "chobojunk@gmail.com");
List<TaskTableViewModel> viewModelList = Mapper.Map<List<Task>, List<TaskTableViewModel>>(tasks);
return Json(viewModelList, JsonRequestBehavior.AllowGet);
}
Отображения
Метод Register () выполняется на уровне global.asa. Другой метод выше вызывается в моем контроллере.
/// <summary>
/// Special case where I need to pass in a parameter
/// </summary>
public static void RegisterTaskViewModel(string dateFilter)
{
Mapper.CreateMap<Task, TaskTableViewModel>().ForMember(dest => dest.DueDate,
opt => opt.ResolveUsing<DueDateResolver>().ConstructedBy(() => new DueDateResolver(dateFilter)));
}
public static void Register()
{
Mapper.CreateMap<Task, TaskTableViewModel>().ForMember(dest => dest.DueDate,
opt => opt.ResolveUsing<DueDateResolver>().ConstructedBy(() => new DueDateResolver("")));
}