ASP.Net MVC アプリケーション内で Automapper を使用して、DTO を ViewModel オブジェクトにマップしています。
私のマッピングの 1 つで、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 が null です。
これは、Automapper がマッピングを解決する方法と関係があると思います。おそらく、マッピングの作成時に 1 つのコンテキストへの参照が設定され、マッピング時にこのコンテキストが存在しなくなりますか?
問題を解決するにはどうすればよいですか? パラメータをマッピング操作に渡す方法はありますか?
私の一時的な回避策は、他のすべてのフィールドをマップし、マップされたコレクションを手動でループして、現在のコンテキストを必要とするフィールドを設定することですが、このアプローチを維持するのは嫌いです。