我有一个mvc控制器,它有一个辅助类注入其中。我想使用automapper从viewmodel转换为dto。大多数属性都是简单的映射,但其中一个涉及使用viewmodel中的参数调用helper类。理想情况下,我想做这样的事情:
Mapper.CreateMap<TheViewModel, TheDto>()
.ForMember(dest => dest.Url, o => o.MapFrom(src => _urlHelper.GenerateUrlFromUsername(src.Username)));
...但我不能,因为我无法访问非静态字段。
最好的方法是什么?
编辑:
好的,所以我有一个自定义解析器但是如何将其挂钩到我的IoC容器中?
public class CustomResolver : ValueResolver<TheViewModel, string>
{
private readonly IUrlHelper _urlHelper;
public CustomResolver(IUrlHelper urlHelper)
{
_urlHelper = urlHelper;
}
protected override string ResolveCore(TheViewModel source)
{
return _urlHelper.GenerateUrlFromUsername(source.Username);
}
}
答案 0 :(得分:4)
在这种情况下使用自定义解析器:
http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers
自定义解析器可以从容器中实例化,因此您可以获得所需的任何实例服务字段。