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

时间:2016-06-28 03:41:43

标签: c# .net asp.net-mvc model-view-controller readonly

我有一个像这样的只读字段

private readonly IManageSessionContext _manageSessionContext;

public ManageController(IManageSessionContext manageSessionContext)
{
      _manageSessionContext= manageSessionContext;
      //doing some operations
      _manageSessionContext.Clear();
}

不清除此只读字段的会话或对象值。为什么?但是当我将它放在Index View中的return语句之前时,它确实清楚了。

1 个答案:

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

现在进入链条

  1. 构造函数调用 - >清除会议
  2. 调用索引方法(操作)在会话中是否有效 - >清除会话
  3. 当构造函数首先执行 时,对象的任何其他工作都会更改对象,因此在关闭Clear方法之前需要Clear

    希望这是有道理的。