Automapper - 映射字段并使用会话变量计算。怎么样?

时间:2014-08-27 22:12:28

标签: c# asp.net-mvc automapper

映射字段时有没有办法将参数传递给automapper?

我有一个名为:

的模型属性
public double Meters {get; set;}

我使用automapper将这些米转换为KILOMETERS或MILES,具体取决于根据用户的偏好生成的Session变量;

Session["Factor"] = Units.KM;

问题在于,当我使用automapper时,我可以执行此操作

 Mapper.CreateMap<Distance, DistanceViewModel>()
            .ForMember(a => a.Distance, exp => exp.ResolveUsing(p => p.Meters * (double)Session["Factor"]))

因为我无法从我的MVC项目中的Automapper帮助文件访问Session对象。

有人遇到过这个问题吗?什么是实现这一目标的最佳方式?

先谢谢。

编辑:我尝试了答案中的方法,但是为空。

public class EffortInPaceProfile : Profile
{
    protected override void Configure()
    {

        var factor = (double)HttpContext.Current.Session["DistanceFactor"];

        Mapper.CreateMap<Model, ViewModel>()
            .ForMember(e => e.TotalMeters, exp => exp.ResolveUsing(p => p.TotalMeters * factor));
    }
}


Line 210: var factor = (double)HttpContext.Current.Session["DistanceFactor"]; //NULL

1 个答案:

答案 0 :(得分:2)

你需要从HttpContext中获取它:

 Mapper.CreateMap<Distance, DistanceViewModel>()
       .ForMember(a => a.Distance, exp => exp.ResolveUsing(p => p.Meters * (double)HttpContext.Current.Session["Factor"]))

不要忘记包含System.Web命名空间。