【发布时间】:2009-02-24 15:45:29
【问题描述】:
我一直在思考的一个问题 - Stackoverflow 用户通常会在构造函数中实现重要的功能(特别是在派生自 System.Web.UI.Page 类的类中),还是应该让这里的逻辑保持简单而是在 OnPreInit 中实现功能(使用构造函数简单地实例化页面其余部分功能所需的对象/值)?这种情况是否有“最佳实践”方法?
这个问题的背景:
我正在处理的系统具有相当深的页面层次结构 - 实际页面派生自大约 10 个链接的页面对象:
-- System.Web.UI.Page ----- CustomPage1 : System.Web.UI.Page -------- CustomPage2 : CustomPage1 - - - - - ETC每个页面都添加了一个特定的功能,并且通常依赖于自定义页面构造函数中运行的代码,或者功能本身在构建过程中直接运行。
最能说明我的问题的示例是将自定义对象从我们的数据库加载到页面的页面,以便它们在页面生命周期中可用 - 在页面构建期间,与数据库建立连接,然后使用正确的公共属性填充价值观。
在我看来,这最好从 OnPreInit 事件中完成,主要是因为我们在父逻辑运行之前有更大的灵活性来执行一些页面级别的检查(例如,我们是否希望阻止调用此功能)(假设在构造函数的执行顺序将在子类之前构造父类)。从 OO 的角度来看,OnPreInit 似乎是实现此功能的更合适的领域 - 页面构建应该处理页面的构建、设置任何默认值等,然后 OnPreInit 将用于执行在页面的生命周期。
【问题讨论】:
标签: asp.net constructor onpreinit