Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AutoMapper - How to pass parameters into a Custom Resolver using ConstructedBy method?

In my ASP.NET MVC 2 (RC) project - I'm using AutoMapper to map between a Linq to Sql class (Media) and a view model (MediaVM). The view model has a SelectList property for a drop down in the view. I have a custom value resolver to populate the SelectList property items from the db, but am wondering if there's a way to pass a couple values from the source model into the resolver (using ConstructedBy method?) to a) define the selected item and b) filter the items from the db. The source object gets passed into the custom resolver - but the resolver is used on several different view models with different types of source objects, so would rather define where to get the values from in my mapping config. Here is my view model:

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

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

The automapper mapping config:

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

It would be nice to be able to do something like this on the .ForMember mapping clause:

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

Is there a way to accomplish this?

like image 499
Bryan Avatar asked Jan 15 '10 17:01

Bryan


1 Answers

I like that idea as a feature request. You can do something like that right now, with MapFrom:

ForMember(dest => dest.slUsers, opt => opt.MapFrom(src => new UsersSelectListResolver(src).Resolve(src));
like image 63
Jimmy Bogard Avatar answered Oct 05 '22 22:10

Jimmy Bogard