Одна из причин заключается в том, что это полезно для более сложных сценариев сопоставления, где вам нужно определить более специфические поведения. Например (от CodePlex ):
Mapper.CreateMap<CalendarEvent, CalendarEventForm>()
.ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.EventDate.Date))
.ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.EventDate.Hour))
.ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.EventDate.Minute));
Еще один вариант для простого сопоставления, например, того, что вы делаете, - создать универсальный сопоставитель, который позаботится о вызове CreateMap, например:
public interface IMapper<T1, T2>
{
T1 Map(T2 source);
}
public class Mapper<T1, T2> : IMapper<T1, T2> where T1 : class where T2 : class
{
public Mapper()
{
Mapper.CreateMap<T2, T1>();
}
public T1 Map(T2 source)
{
return Mapper.Map<T2, T1>(source);
}
}
И тогда вы можете просто создать их экземпляр, например:
var mapper = new Mapper<SiteSettings, SiteSettingsViewModel>();
Или зарегистрируйте их для внедрения в ваши контроллеры, или где бы вы ни планировали их использовать. Надеюсь, это поможет.