在构造函数中分配的只读字段,清除它也不会清除值
本文关键字:清除 读字段 构造函数 分配 | 更新日期: 2023-09-27 17:52:40
我有一个像这样的只读字段
private readonly IManageSessionContext _manageSessionContext;
public ManageController(IManageSessionContext manageSessionContext)
{
_manageSessionContext= manageSessionContext;
//doing some operations
_manageSessionContext.Clear();
}
不清除该只读字段的会话或对象值。为什么?但当我把它放在Index View的return语句之前,它就会被清除。
您没有为您的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)
,最终为IManageSessionContext
调用Clear()
方法
下一步Index
执行,索引DoSomeWorkWithManagedContext()
被调用,这改变了IManageSessionContext
的依赖。然后Index
方法重新调用Clear
方法。
现在在链中是
- Constructor Called -> Clear's session
- 索引方法(动作)调用Does work in session ->清空会话
当构造函数首先执行时,任何对对象的额外操作都将改变对象,因此在关闭Index
方法之前需要Clear
。