В этой ситуации я бы поместил объект хранилища в сеанс с использованием уникального ключа и привязал ключ к странице. Все это можно абстрагировать в свойства класса страницы.
public string PersistanceKey
{
get {
if(ViewState["PersistanceKey"] == null)
ViewState["PersistanceKey"] = "Object" + Guid.NewGuid().ToString();
return (string)ViewState["PersistanceKey"];
}
}
public PersistanceObject Persistance
{
get {
if(Session[this.PersistanceKey] == null)
Session[this.PersistanceKey] = new PersistanceObject();
return (PersistanceObject)Session[this.PersistanceKey];
}
Различные сеансовые ключи позволяют использовать разные объекты для каждой страницы. В качестве альтернативы, вместо использования объекта Session, вы можете рассмотреть возможность использования кэша приложения (объекта Cache) для автоматического удаления устаревших записей из памяти, но это имеет свои собственные предостережения.
Следует отметить, что предупреждения Джоэла относительно его ответа об использовании памяти абсолютно точны. Возможно, это не лучшая идея для сценариев с малым объемом памяти, интенсивным использованием или объектами с большим постоянством.