在构造函数中分配的只读字段并且清除它不会清除值

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方法。

现在中链会去

  1. 已调用构造函数 -> Clear 的会话
  2. 调用的索引方法(操作)在会话中有效 -> 清除会话

随着构造函数的执行 首先 对对象的任何额外工作都会改变对象,因此在关闭 Index 方法之前需要 Clear

希望这是有道理的。