То, что вы представляете, имеет смысл - использование контекста HTTP-запроса для хранения вещей - но Нет, одноразовые объекты, хранящиеся в текущем HttpContext, не будут автоматически удаляться по окончании запроса. Вам придется как-то изменить это самостоятельно.
Существует событие «Завершить запрос», которое вы можете легко подключить, например, используя код, который вы перетащите в Global.asax.cs. В вашем методе Application_EndRequest () вы можете вызвать Dispose()
вручную для каждого объекта в списке, который требует его.
Один из способов сделать это - перебирать каждый элемент в контексте, проверять наличие IDisposable, а затем вызывать Dispose, если это необходимо.
protected void Application_EndRequest(Object sender, EventArgs e)
{
foreach (var key in HttpContext.Current.Items.Keys)
{
var disposable = HttpContext.Current.Items[key] as IDisposable;
if (disposable != null)
{
disposable.Dispose();
HttpContext.Current.Items[key] = null;
}
}
}
Я думаю, что должен это сделать. ASPNET не делает это для вас автоматически. Конечно, вам нужна защита от исключений и так далее, прежде чем использовать этот код в реальном приложении.
Кейт Крэйг из Vertigo недавно написал соответствующий пост по этой теме , описывая то, что вы хотите сделать в качестве шаблона, другими словами, способ делать то, что должно повторяться. Он предоставляет класс, чтобы помочь с этим, лениво загрузить контекст БД и перенести его в текущий контекст. Есть некоторые подводные камни с подходом - вы можете прочитать о них в комментариях к дискуссии на этот пост. Также в комментариях цитируется куча связанных статей.