【发布时间】:2014-09-23 19:27:52
【问题描述】:
在我正在运行的控制器操作中
public ActionResult MyAction()
{
Task.Factory.StartNew( () =>
{
myService.ExecuteMethod( someArgs );
} );
}
该服务将调用调用其他类的其他类方法,并且在某个地方,IPrincipal 被注入到类的构造函数中。
IPrincipal 是通过 HttpContext.Current.User 创建的。
由于代码在Task 中,它在不同的线程上运行,并且操作已返回,因此HttpContext.Current 是null。
如果我尝试执行Thread.CurrentPrincipal,它存在,但设置为不同于HttpContext.Current.User 的内容。另外,如果我尝试访问Thread.CurrentPrincipal.Identity.Name,我会得到一个ObjectDisposedException。
我将 Ninject 用于我的 IoC 容器。 IPrincipal 绑定看起来像这样
Bind<IPrincipal>().ToMethod( x => HttpContext.Current.User );
有没有办法在控制器操作中从Task 运行的代码中获得正确甚至可用的IPrincipal?
【问题讨论】:
标签: asp.net-mvc task-parallel-library ninject task