【问题标题】:Why the .aspx inherited IDispose,but .ashx not?为什么 .aspx 继承了 IDispose,而 .ashx 没有?
【发布时间】:2011-12-18 09:07:28
【问题描述】:

它们都继承了IHttpHandler接口,所以asp.net会以同样的方式调用它们。但是为什么aspx页面继承了IDispose呢? asp.net是怎么实现的呢?

【问题讨论】:

  • 很抱歉这个问题不能解决我的问题。应用程序调用工厂(PageHandlerFactory或SimpleHandlerFactory)制作IHttphandler,并以相同的方式处理它们(不使用“使用”)。那么为什么aspx页面继承了IDispose
  • aspx 有(应该有)UI 控件。 StakcOverflow 更多的是解决开发过程中面临的编程问题。如果您有非常具体的产品相关查询,您最好询问供应商,在这种情况下是 Microsoft。我的意思是,如果您有关于aspx 的IDispose 或ashx 没有它的实现问题,那么请描述该问题。我们将向您展示该问题的解决方法或解决方案。但如果你想知道原因,最好问问微软的团队
  • 无论如何谢谢你~
  • 而我的解决方法是关于“关于 aspx 的 IDispose 或 ashx 没有它的实现问题”。我只有明白什么深层次的原因。非常感谢。

标签: asp.net


【解决方案1】:

ASP.NET page 继承自 System.Web.UI.Page 基类,后者又实现抽象 System.Web.UI.TemplateControl 类,该抽象类继承自 System.Web.UI.Control 实现 IDisposable.

代码中有Control类的Dispose()的注释:

// 概括: // 使服务器控件能够在释放之前执行最终清理 // 从记忆里。

这就是.aspx 文件本质上实现IDisposable 接口的原因。

现在,ASP.NET handler 直接实现System.Web.IHttpHandler 接口而不继承任何其他类——作为独立接口,它不实现IDisposable——由程序员决定是否添加或不添加这样的东西。

【讨论】:

    【解决方案2】:

    所以你的问题是,aspx (Page) 的Dispose() 代码是如何被调用的?

    您假设 ASP.NET 框架只看到 IHttpHandler,无论它包含 Page 还是其他实现。这几乎肯定不是真的。 某事需要调用页面的构造函数。

    您可以使用IL Spy 之类的工具来尝试查找不同处理的位置以及它的外观。

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2011-05-06
      • 2022-01-17
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多