2008-10-22 3 views
0

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]; 
     } 
    } 
} 
 
WebService 클래스의 HTTP 컨텍스트에 액세스 할 수 있습니까? 중첩 된 클래스? 그렇지 않다면 참조를 저장할 수있는 방법이 있습니까?

답변

0
System.Web.HttpContext.Current 

?

5

C#의 중첩 클래스는 Java의 (비 정적) 내부 클래스와 같지 않습니다. 포함하는 클래스의 인스턴스에 대한 암시 적 참조는 없으므로 명시 적 참조없이 포함하는 클래스의 인스턴스 멤버를 사용할 수 없습니다.

그러나 인스턴스 멤버에 대한 적절한 참조가 포함 된 클래스의 모든 비공개 멤버에 액세스 할 수 있습니다.

0

몇 가지 생각할 수 있습니다.

먼저 Context에 액세스하는 대신 getContext()를 사용해보십시오. 그게 효과가 있다면, 끝났어.

그렇지 않은 경우 서비스를 SessionPool의 초기화 프로그램으로 전달할 수 있습니다. Foo()에서 getSession()을 호출하기 전에 setService() 호출을 통해 초기화하는 WebService 핸들을 SessionPool에 추가하십시오.

하지만 그 시점에서 getSession()에 대한 인수로 Context를 전달하지 않는 이유는 무엇입니까?

관련 문제