На самом деле, если вы искали объекты типа, разместите тип на уровне метода, например:
public T GetValue<T>(string sessionKey)
{
}
Уровень класса больше, если у вас один и тот же объект в сеансе, но сеанс может быть расширен до нескольких типов. Я не знаю, что бы беспокоиться о контроле сеанса; Я просто позволил бы ему делать то, что он делает некоторое время, и просто предоставлял средства для извлечения и сохранения информации более строго типизированным способом (по крайней мере для потребителя).
Да, индексы не будут работать; вместо этого вы можете создать его как экземпляр и сделать его статическим:
public class SessionManager
{
private static SessionManager _instance = null;
public static SessionManager Create()
{
if (_instance != null)
return _instance;
//Should use a lock when creating the instance
//create object for _instance
return _instance;
}
public object this[string key] { get { .. } }
}
Итак, это статическая реализация фабрики, но она также поддерживает единую точку контакта через статическую ссылку на класс диспетчера сеансов внутри. Каждый метод в sessionmanager может обернуть существующий сеанс ASP.NET или использовать собственное внутреннее хранилище.