В какие поля может обращаться вложенный класс того класса, в который он вложен? - PullRequest
0 голосов
/ 22 октября 2008

У меня есть веб-сервис на C #, и я хотел бы иметь вложенный внутренний класс, который абстрагирует коллекцию сеансов, что-то вроде этого:


public class Service : System.Web.Services.WebService
{
    [WebMethod]
    public string Foo(string ticket)
    {
        SessionPool.getSession(ticket);
    }

    private class SessionPool 
    {
        public static Session getSession(string ticket)
        {
            // this is what i want to do, but I can't access Context
            return (Session)Context.Session[ticket];
        }
    }
}

Можно ли получить доступ к HTTP-контексту класса WebService через вложенный класс? Если нет, то есть ли способ сохранить ссылку на него?

Ответы [ 3 ]

5 голосов
/ 22 октября 2008

Вложенные классы в C # не похожи (не статичны) на внутренние классы в Java. Не существует неявной ссылки на экземпляр содержащего класса, поэтому вы не можете использовать никакие члены экземпляра содержащего класса без явной ссылки.

Однако у вас есть доступ ко всем закрытым членам содержащего класса - с подходящей ссылкой для членов экземпляра.

0 голосов
/ 22 октября 2008

Я могу вспомнить пару вещей.

Во-первых, вы можете попробовать использовать getContext () вместо простого доступа к Context. Если это сработает, все готово.

Если нет, вы можете передать Сервис в качестве инициализатора вашему SessionPool. Добавьте дескриптор WebService к SessionPool, который вы инициализируете посредством вызова setService () перед вызовом getSession () из Foo ().

Хотя, на этом этапе, почему бы просто не передать Context в качестве аргумента getSession ()?

0 голосов
/ 22 октября 2008
System.Web.HttpContext.Current

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...