2014-08-27 38 views
0

映射字段時有什麼辦法可以將參數傳遞給automapper嗎?Automapper - 映射字段並使用會話變量進行計算。怎麼樣?

我有一個名爲模型屬性:

public double Meters {get; set;} 

我用automapper那些米轉換成取決於基於用戶的喜好生成會話變量千米或英里;

Session["Factor"] = Units.KM; 

的問題是,當我使用automapper我可以做這個手術

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

因爲我不能訪問從Automapper輔助文件Session對象在我的MVC項目。

有人遇到過這個問題嗎?什麼是實現這一目標的最佳方式?

謝謝先進。

編輯:我試過在答案的方法,但是是空的。

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 

回答

2

你需要從HttpContext的得到它:

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

不要忘了包括的System.Web命名。

+0

Ufuk感謝您的回答我嘗試了您的方法,但會話爲空。檢查編輯,以便您可以看到它...是我做錯了什麼?我分配的值global.asax Session_Start – MRFerocius 2014-08-28 00:43:57

+0

我認爲我的問題是,我有一個類來創建映射配置文件...並且在global.asax會話開始之前執行,因爲創建配置文件的調用是在Application Start 。 – MRFerocius 2014-08-28 00:48:05