我有一个像这样的只读字段
private readonly IManageSessionContext _manageSessionContext;
public ManageController(IManageSessionContext manageSessionContext)
{
_manageSessionContext= manageSessionContext;
//doing some operations
_manageSessionContext.Clear();
}
不清除此只读字段的会话或对象值。为什么?但是当我将它放在Index View中的return语句之前时,它确实清楚了。
答案 0 :(得分:1)
您尚未提供Index
操作的任何代码,但在您的示例中,您在构造函数中调用了_manageSessionContext.Clear();
。
当创建类ManageController
并传递IManageSessionContext
依赖项时,将调用构造函数。始终首先调用构造函数Clear()
IManageSessionContext
(无论是什么)。
我的预感是IManageSessionContext
正在调用ManageController
类的构造函数和返回Index
操作方法之间的工作还有很多工作。
例如。请参阅下面的代码段
public class ManageController
{
readonly IManageSessionContext _manageSessionContext;
public ManageController(IManageSessionContext manageSessionContext)
{
_manageSessionContext = manageSessionContext;
//some operations..
_manageSessionContext.Clear();
}
public ActionResult Index()
{
_manageSessionContext.DoSomeWorkWithManagedContext();
_manageSessionContext.Clear();
return View();
}
}
代码首先执行构造函数ManageController(IManageSessionContext manageSessionContext)
,最终调用Clear()
的{{1}}方法
接下来执行操作IManageSessionContext
,调用索引Index
,这会更改DoSomeWorkWithManagedContext()
依赖项。然后IManageSessionContext
方法重新调用Index
方法。
现在进入链条
当构造函数首先执行 时,对象的任何其他工作都会更改对象,因此在关闭Clear
方法之前需要Clear
。
希望这是有道理的。