Жизнеспособность ссылок на веб-элементы управления ASP.NET из коллекции HttpContext.Items?

MSDN описывает HttpContext.Items как используемый для:

<blockquote>

организовать и обмениваться данными между интерфейсом IHttpModule и интерфейсом IHttpHandler во время HTTP-запроса.

MSDN не дает никаких рекомендаций относительно хранения ссылок на элементы управления страницей в этой коллекции. Я знаю, что сборка Items переживает жизненный цикл страницы, потому что она связана с запросом.

Причина, по которой я спрашиваю о возможности хранения контрольных ссылок в коллекции Items, заключается в том, что мы рассматриваем возможность создания некоторых элементов управления страницей, которые поддерживают определенный (известный) интерфейс, чтобы регистрироваться на странице при загрузке. Это связано с тем, что позиция элементов управления на странице может измениться, поскольку они настраиваются конечным пользователем через систему управления контентом - так собирается страница. Мы хотим держаться подальше от рекурсивной иерархии управления страницей, а вместо этого сами элементы управления могут непосредственно регистрироваться.

Наилучшим примером является то, что кто-то сбивает эту идею по уважительной причине, потому что они думали о проблеме, которой у нас нет, или имеют лучшую идею для достижения того же.

1 ответ

Страница ASP.NET также является обработчиком HTTP через IHttpHandler интерфейса IHttpHandler и поэтому является допустимым кандидатом для использования с коллекцией HttpContext.Items по определению в документе MSDN.

Поскольку элементы управления страницами эффективно работают с обработчиком, кажется очевидным риск связать элементы управления страницы из коллекции Items.

Моя главная проблема заключалась в жизни объектов управления в контексте страницы и более продолжительного срока службы запроса/контекста, к которому относится сбор. Однако элементы управления все равно будут правильно размещены с помощью IDisposable, когда страница будет завершена, и сборщик мусора будет по-прежнему очищать элементы управления, когда они, наконец, будут выпущены из коллекции Items, которые не должны быть длинными после завершения обработчика страницы.

licensed under cc by-sa 3.0 with attribution.