Asp.net mvc 3 自动映射-如何映射与当前会话对象的依赖关系
我在ASP.NETMVC应用程序中使用Automapper将DTO映射到ViewModel对象 在我的一个映射中,我需要访问存储在会话对象中的对象Asp.net mvc 3 自动映射-如何映射与当前会话对象的依赖关系,asp.net-mvc-3,automapper,Asp.net Mvc 3,Automapper,我在ASP.NETMVC应用程序中使用Automapper将DTO映射到ViewModel对象 在我的一个映射中,我需要访问存储在会话对象中的对象 public override void OnAuthorization(AuthorizationContext filterContext) { ... SecurityToken token = SecurityTokenFactory.CreateSecurityToken(userNode); filterC
public override void OnAuthorization(AuthorizationContext filterContext)
{
...
SecurityToken token = SecurityTokenFactory.CreateSecurityToken(userNode);
filterContext.HttpContext.Session[securityToken] = token;
...
}
在控制器的构造函数中,我设置了自动映射
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
...
}
Mapper.CreateMap()
.ForMember(dest=>dest.IsEditable,opt=>opt.resolvesusing(src=>this.IsEditable(src));
私有bool可编辑(UserReportDTO报告)
{
if(this.GetCurrentUserToken().UserVisibilityLevel==VisibilityLevel.Root)
{
返回true;
}
返回false;
}
公共JsonResult GetVisibleUserReports()
{
...
int ID=this.GetCurrentUserToken().UserId;//这很有效!
var reports=Mapper.Map(inputarray);//这不起作用
...
}
发生的情况是context.Session为null
我猜这与Automapper解析映射的方式有关-可能在创建映射时设置了对一个上下文的引用,然后在映射时该上下文不再存在
如何解决此问题?是否有方法将参数传递给映射操作
我的临时解决方法是映射所有其他字段,然后手动循环映射的集合,设置需要当前上下文的字段,但我不愿意保留这种方法。一些想法可能会让您走上正确的道路:
- 如果将
替换为resolvesusing
,会有什么不同吗?两者似乎都接受MapFrom
,但可能存在细微的差异Func
- 是否可以将您的
方法转换为IsEditable
,然后使用AutoMapper的IValueResolver
功能将所需的会话数据传递给构造函数?这是我的建议。滚动到“自定义构造函数方法”部分ConstructedBy()
- 如果将
替换为resolvesusing
,会有什么不同吗?两者似乎都接受MapFrom
,但可能存在细微的差异Func
- 是否可以将您的
方法转换为IsEditable
,然后使用AutoMapper的IValueResolver
功能将所需的会话数据传递给构造函数?这是我的建议。滚动到“自定义构造函数方法”部分ConstructedBy()
- 一些可能让你走上正轨的想法: