Я написал класс следующим образом.Я написал его, принимая во внимание, что он в основном предназначен для использования в Интернете (то есть будет использоваться на страницах aspx).
public class TestHelper
{
public TestHelper()
{
HttpContext ctxt = HttpContext.Current;
IHttpHandler RequestHandler = ctxt.Handler;
Page CurrentPage;
CurrentPage = (Page)RequestHandler;
CurrentPage.Unload += new EventHandler(CurrentPage_Unload);
Debug.Print("Open all connection here...");
}
void CurrentPage_Unload(object sender, EventArgs e)
{
Debug.Print("Close all connection here...");
}
}
И я написал код своей страницы aspx так:1004 *
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TestHelper helper = new TestHelper();
helper = null;
}
}
Несмотря на назначение помощника 'null', я обнаружил, что CurrentPage_Unload()
выполняется.Почему это поведение так?Как обычно называется это поведение?
Причина, по которой я написал урок в этом стиле, заключалась в том, что я думал, что лучше всего смогу управлять своими соединениями БД центральным образом в классе.Обычно люди вызывают методы для объекта, такие как helper.IsValid()
, за которым следует helper.ProfileExists()
в коде aspx.Каждый из этих методов будет иметь свои собственные объекты подключения к базе данных (IDbConnection) и соответствующие им Open()
& Close()
вызовы для открытия / закрытия подключения к базе данных.Я просто чувствовал, что мы должны делать это только один раз в коде.Поэтому я использовал конструктор, чтобы открыть соединения БД, и событие unload объекта Page, чтобы закрыть объекты соединения.Есть ли какие-либо подводные камни для написания классов таким образом?