Здравствуйте, ksg71, Вы писали:
K>Вот так будет работать
K>K>public class VipCurrentUser:HttpSessionSingleton<VipCurrentUser>
K>
Да, но тогда весь функционал работы с пользователем (поле UserName например), надо: либо засовывать в HttpSessionSingleton, тогда HttpSessionSingleton напрочь теряет свою универсальность; либо дублировать в классах VipCurrentUser и CurrentUser, т.к. VipCurrentUser с CurrentUser никак не связан.
Тут бы помогло множественное наследование, но его нет.
K>только метод инициализации инстанса в
K>K>public class CurrentUser:HttpSessionSingleton<CurrentUser>
K>
K>должен создавать экземпляры различных юзеров (Vip или еще каких), в зависимости от каких либо условий
С этим как раз проблем нет:
public class HttpSessionSingleton<T> where T : HttpSessionSingleton<T>, new()
{
public static T Instance
{
get
{
if (HttpContext.Current.Session[SessionKey] == null)
{
lock (lock_obj)
{
if (HttpContext.Current.Session[SessionKey] == null)
{
HttpContext.Current.Session[SessionKey] = new T();
}
}
}
return current;
}
}
}
то есть создается именно тот инстанс, тип которого был передан в дженерик. Получается как бы, что класс наследуется и от синглетрона и от самого себя (через свойство инстанс)