我在 ASP.Net MVC 应用程序中使用 Automapper 将 DTO 映射到 ViewModel 对象。
在我的一个映射中,我需要访问存储在 Session 对象中的对象。
public override void OnAuthorization(AuthorizationContext filterContext)
{
...
SecurityToken token = SecurityTokenFactory.CreateSecurityToken(userNode);
filterContext.HttpContext.Session[securityToken] = token;
...
}
在我的控制器的构造函数中,我设置了 Automapper 映射。
Mapper.CreateMap<UserReportDTO, UserDefinedReportModel>()
.ForMember(dest => dest.IsEditable, opt=>opt.ResolveUsing(src => this.IsEditable(src)));
private bool IsEditable(UserReportDTO report)
{
if (this.GetCurrentUserToken().UserVisibilityLevel == VisibilityLevel.Root)
{
return true;
}
return false;
}
public JsonResult GetVisibleUserReports()
{
...
int ID = this.GetCurrentUserToken().UserId; //This works!
var reports = Mapper.Map < UserReportDTO[], UserDefinedReportModel[] >(inputarray); //This doesn't work
...
}
发生的情况是 context.Session 为空。
我猜这与 Automapper 解析映射的方式有关 - 也许在创建映射时设置了对一个 Context 的引用,然后这个 Context 在映射时不再存在?
我该如何解决这个问题 - 有没有办法将参数传递给映射操作?
我的临时解决方法是映射所有其他字段,然后手动循环遍历映射集合,设置需要当前上下文的字段,但我不愿意保留这种方法。