Re[2]: Вопрос по generic-ам
От: ыукпшл Россия  
Дата: 11.05.07 09:02
Оценка:
Здравствуйте, ksg71, Вы писали:

K>.....


Спасибо за действительно верное решение, но в моем случае оно не подходит.

Попробую объяснить чего я хочу по подробнее. Я делаю три базовых синглетона (обычный, уникальный в пределах сессии, уникальный в пределах HTTP-запроса): Singleton<T>, HttpSessionSingleton<T> и HttpRequestSingleton<T>. Они отличаются только способом выдачи Instance: для Singleton<T> выдается статичный экземпляр (исходник класса приведен выше); для HttpSessionSingleton<T> выдается экземпляр хранящийся в ASP.Net сессии и т.п.

Я хочу избавится от ".Instance." в коде "SingleUserDB.Instance.SomeMethod()", чтобы этот код превратился в "SingleUserDB.SomeMethod()".

Данная проблема стоит для меня скорее в чисто теоретических целях (просто я хочу, чтобы код выглядел красиво), на практике конечно можно пользоваться ".Instance.".

Основная идея моего проектирования данного куска — нужно чтобы код выглядел так:
public class CurrentUser:HttpSessionSingleton<CurrentUser>
{
    private string _Name=null;

    public CurrentUser()
    {
         _Name="имя";
    }


    public static string Name
    {
         return Instance._Name;
    }
}

Теперь в любом месте программы (без всякого создания CurrentUser-а, операций с сессией и т.п.) мы можем написать:
    string s=CurrentUser.Name;


При этом класс CurrentUser должен наследоваться как от синглетона (чтобы автоматом создаваться — Instance), так и содержать Instance, имеющего тип "самого себя" (чтобы взять базовую функциональность -Name).

Все отлично работает до тех пор, пока мы не наследуем CurrentUser:
public class VIPCurrentUser:CurrentUser
{
    public VIPCurrentUser()
    {
         _Name="какое-то другое имя"; //этот кусок никогда не выполнится, вместо него будет неявно вызываться конструктор CurrentUser()
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.