2008-10-22 104 views
0

我在C#中的Web服務,並希望有一個嵌套的內部類,抽象掉會話集合,這樣的事情:它嵌套在類中的嵌套類訪問有哪些字段?

 

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]; 
     } 
    } 
} 
 

是否有可能通過訪問WebService類的HTTP上下文一個嵌套類?如果沒有,我可以存儲對它的引用嗎?

回答

0
System.Web.HttpContext.Current 

5

C#中的嵌套類不像Java中的(非靜態)內部類。沒有對包含類的實例的隱式引用 - 所以你不能使用包含類的任何實例成員而沒有明確的引用。

但是,您確實可以訪問包含類的所有私有成員 - 併爲實例成員提供了適當的參考。

0

我可以想起幾件事情。

首先,您可以嘗試使用getContext()而不是僅訪問上下文。如果這樣做,你就完成了。

如果不是,您可以將服務作爲初始化程序傳遞給SessionPool。將一個WebService句柄添加到SessionPool中,您可以在從Foo()調用getSession()之前通過調用setService()來初始化該句柄。

雖然在這一點上,爲什麼不只是傳遞上下文作爲getSession()的參數?