2008-10-22 5 views
0

J'ai un service Web en C# et aimeraient avoir une classe imbriquée interne, qui fait abstraction de la collection de la session, quelque chose comme ceci:Dans quels champs une classe imbriquée peut-elle accéder à la classe dans laquelle elle est imbriquée?

 

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

Est-il possible d'accéder au contexte HTTP de la classe WebService via une classe imbriquée? Sinon, y a-t-il un moyen de stocker la référence?

Répondre

0
System.Web.HttpContext.Current 

?

5

Les classes imbriquées en C# ne sont pas des classes internes (non statiques) en Java. Il n'y a pas de référence implicite à une instance de la classe contenant - donc vous ne pouvez utiliser aucune instance des membres de la classe contenant sans référence explicite.

Cependant, vous avez accès à tous les membres privés de la classe conteneur - avec une référence appropriée pour les membres par exemple.

0

Je peux penser à deux choses. Tout d'abord, vous pouvez essayer d'utiliser getContext() au lieu de simplement accéder à Context. Si cela fonctionne, vous avez terminé. Si ce n'est pas le cas, vous pouvez passer le Service en tant qu'initialisateur à votre SessionPool. Ajoutez un handle WebService à SessionPool que vous initialisez via un appel à setService() avant d'appeler getSession() à partir de Foo().

Bien que, à ce stade, pourquoi ne pas simplement passer dans le contexte comme argument à getSession()?

Questions connexes