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

本文关键字:清除 读字段 构造函数 分配 | 更新日期: 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方法。

现在在链中是

  1. Constructor Called -> Clear's session
  2. 索引方法(动作)调用Does work in session ->清空会话

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