/ / MVC, pas "supposé" utiliser HttpContext.Current plus? - asp.net-mvc, contrôleur, httpcontext

MVC, pas "supposé" utiliser HttpContext.Current plus? - asp.net-mvc, contrôleur, httpcontext

Quelqu'un dans un post ici, a commenté que vous ne devriez pas utiliser HttpContext.Current lorsque vous utilisez MVC, vous devriez plutôt utiliser ControllerBase.ControllerContext. À certains égards, cela a du sens, mais à d’autres, cela ne le fait pas.

Par exemple, ControllerContext est une instance.variable, donc partout où je veux référencer, par exemple, mes variables de session, je dois avoir une référence au contrôleur? Pourquoi ne sommes-nous pas supposés utiliser HttpContext.Current dans MVC, alors que vous le pouvez encore? Existe-t-il un "moyen" MVC "approprié" pour accéder à mon objet de session sans avoir à faire référence au contrôleur?

Je sais que sur le test, il est préférable pour les raisons énoncéesdans beaucoup d'autres endroits, mais je travaille sur un projet qui gère les variables de session et référence HttpContext.Current et je veux savoir s'il existe un meilleur moyen de mettre la main sur l'objet Session sans passer de référence au contrôleur.

Réponses:

7 pour la réponse № 1

Ceci est principalement dû au fait que les tests unitaires seraient très difficiles si vous utilisiez HttpContext.Current étant donné que se moquer de cette valeur n'est pas possible en utilisant des frameworks simulés normaux.

HttpContext.Current fait également pour le code plus fragile, car il peut êtremaltraité et mal utilisé. Par exemple, vous pouvez l’utiliser dans la couche de gestion car c’est pratique, mais si vous choisissez d’utiliser une autre couche de présentation autre que ASP.NET, le processus échouera.

Les méthodes généralement statiques sont de nos jours mal vues car elles ne peuvent pas être dépendance injectée.


1 pour la réponse № 2

Votre article était dû à des tests simulés, où, selon le simulacre, il pourrait ne pas y avoir de HttpContext, mais seulement un contexte de contrôleur. Sinon, j'utilise HttpContext.Current, mais pas dans mes tests unitaires.