在构造函数中分配的只读字段并且清除它不会清除值
readonly field assigned in constructor and also clearing it doesn't clear values
我有一个像这样的只读字段
private readonly IManageSessionContext _manageSessionContext;
public ManageController(IManageSessionContext manageSessionContext)
{
_manageSessionContext= manageSessionContext;
//doing some operations
_manageSessionContext.Clear();
}
不清除此只读字段的会话或对象值。为什么?但是当我把它放在索引视图中的 return 语句之前时,它确实很清楚。
您没有为 Index
操作提供任何代码,但是在您的示例中,您在构造函数中调用了 _manageSessionContext.Clear();
。
构造函数在 class ManageController
创建时调用 IManageSessionContext
依赖项。构造函数总是在您首先 Clear()
ing IManageSessionContext
(无论是什么)的地方首先被调用。
我的直觉是 IManageSessionContext
在调用 ManageController
class 的构造函数和 [=11= 的 return 之间有更多工作要做] 动作方法.
例如。拿下面的代码片段
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
方法。
现在中链会去
- 已调用构造函数 -> Clear 的会话
- 调用的索引方法(操作)在会话中有效 -> 清除会话
随着构造函数的执行 首先 对对象的任何额外工作都会改变对象,因此在关闭 Index
方法之前需要 Clear
。
希望这是有道理的。
我有一个像这样的只读字段
private readonly IManageSessionContext _manageSessionContext;
public ManageController(IManageSessionContext manageSessionContext)
{
_manageSessionContext= manageSessionContext;
//doing some operations
_manageSessionContext.Clear();
}
不清除此只读字段的会话或对象值。为什么?但是当我把它放在索引视图中的 return 语句之前时,它确实很清楚。
您没有为 Index
操作提供任何代码,但是在您的示例中,您在构造函数中调用了 _manageSessionContext.Clear();
。
构造函数在 class ManageController
创建时调用 IManageSessionContext
依赖项。构造函数总是在您首先 Clear()
ing IManageSessionContext
(无论是什么)的地方首先被调用。
我的直觉是 IManageSessionContext
在调用 ManageController
class 的构造函数和 [=11= 的 return 之间有更多工作要做] 动作方法.
例如。拿下面的代码片段
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
方法。
现在中链会去
- 已调用构造函数 -> Clear 的会话
- 调用的索引方法(操作)在会话中有效 -> 清除会话
随着构造函数的执行 首先 对对象的任何额外工作都会改变对象,因此在关闭 Index
方法之前需要 Clear
。
希望这是有道理的。