Причина, по которой я спрашиваю, состоит в том, что коллекция HttpContext.Current.Items
кажется, что было бы хорошим местом для размещения IDisposable
объектов, таких как DataContext
, чтобы репозиторий мог получить к нему прозрачный доступ без необходимости вставлять какие-либо зависимости, связанные с к конкретной технологии ORM в хранилище. Это также позволило бы хранилищу решить, участвовать ли в UnitOfWork
или взять на себя дополнительную ответственность за фактическое сохранение любых изменений.
Например:
Страница:
protected void Page_Load(...)
{
Items[KeyValueFromConfigurationFile] = new DataContext();
var repo = new Repository();
var rootEntity = repo.GetById(1);
}
Репозиторий:
public virtual TEntity GetById(int id)
{
var ctx = HttpContext.Current.Items[KeyValueFromConfigurationFile] as DataContext;
return ctx.TEntities.SingleOrDefault(p => p.Id == id);
}
Конечно, я бы проверял наличие нулей и выполнял шаги, необходимые для получения DataContext
, если он не был доступен в коллекции HttpContext.Current.Items
.
Итак, вернемся к моему первоначальному вопросу, учитывая приведенный выше код: Будет ли HttpContext.Current
удален вместе с какими-либо объектами, содержащимися в его коллекции Items, даже если будет сгенерировано исключение?