2010-11-23 2 views
2

J'utilise un exemple dans lequel je peux simuler la session. Il est pour une utilisation dans un unittest d'un contrôleur mvc.quelle est la différence entre ControllerContext.HttpContext.Session et HttpContext.Current.Session

Dans le test créer un contrôleur puis-je faire cela:

FakeHttpContext httpctx = new FakeHttpContext(null,null,null,null,mSessionItems); 
ControllerContext ctx2 = new ControllerContext(httpctx,new RouteData(), target); 

mSessionItems est ma session et target est mon exemple d'un contrôleur

et en fait, quand je suis dans un contrôleur lecture this.ControllerContext.HttpContext.Session, j'ai une session, génial!

mais .... j'ai également lu la session en dehors du contrôleur, et là j'utilise HttpContext.Current.Session, et c'est null (ou effectivement, le HttpContext.Current est nul).

Alors je me demandais, quelle est la différence entre les deux? ControllerContext.HttpContext est du type abstrait HttpContextBase.

Répondre

2

L'implémentation par défaut de ce type (HttpContextWrapper) encapsule l'accès à HttpContext. Ainsi, lorsque vous créez la fausse implémentation, vous remplacez sa relation à HttpContext. L'implémentation Faux ne créera pas de vrai HttpContext pour vous.

Btw. Où accédez-vous à la session en dehors du contrôleur? Comment savez-vous qu'il y aura un HttpContext actuel?

+0

Je vais obtenir le HttpContext.Current.Session (que je vérifie pour null bien sûr). Mais dans le scénario de test unitaire, je vais rester coincé. – Michel

Questions connexes