自动映射和访问成员变量

时间:2010-11-29 09:49:07

标签: automapper

我有一个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);
    }
}

1 个答案:

答案 0 :(得分:4)

在这种情况下使用自定义解析器:

http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers

自定义解析器可以从容器中实例化,因此您可以获得所需的任何实例服务字段。