MVC, nicht "angenommen", HttpContext.Current mehr zu verwenden?

8

Jemand in einem Post hier , kommentiert, dass Sie Verwenden Sie nicht HttpContext.Current, wenn Sie MVC verwenden, stattdessen sollten Sie verwenden ControllerBase.ControllerContext . In gewisser Hinsicht ist dies sinnvoll, in anderen Bereichen jedoch nicht.

ControllerContext ist zum Beispiel eine Instanzvariable, also muss ich überall, wo ich auf meine Sitzungsvariablen verweisen möchte, einen Verweis auf den Controller haben? Warum sollten wir "HttpContext.Current" in MVC nicht verwenden, wenn Sie es noch können? Gibt es einen "geeigneten" MVC-Weg, um an mein Session-Objekt zu kommen, ohne einen Verweis auf den Controller zu haben?

Ich weiß testweise, es ist besser aus Gründen, die an vielen anderen Orten angegeben sind, aber ich arbeite an einem Projekt, das Sitzungsvariablen verwaltet und HttpContext.Current referenziert und ich möchte wissen, ob es einen besseren Weg gibt, meinen zu bekommen übergibt das Session-Objekt, ohne einen Verweis auf den Controller zu übergeben.

    
gangelo 02.02.2012, 20:17
quelle

2 Antworten

7

Dies liegt hauptsächlich daran, dass Komponententests sehr schwierig sein würden, wenn Sie HttpContext.Current verwenden, da es nicht möglich ist, diesen Wert mit normalen Mock-Frameworks zu verspotten.

HttpContext.Current sorgt auch für einen spröderen Code, da er missbraucht und missbraucht werden kann. Beispielsweise können Sie es in der Business-Schicht verwenden, da dies praktisch ist. Es wird jedoch beschädigt, wenn Sie eine andere alternative Darstellungsebene als ASP.NET verwenden.

Im Allgemeinen sind statische Methoden heutzutage verpönt, da sie nicht Abhängigkeitsinjektionen sein können.

    
Aliostad 02.02.2012, 20:21
quelle
1

Ihr einziger Beitrag war wegen Mock-Tests, wo es abhängig vom Mock vielleicht keinen HttpContext gibt, nur einen Controller-Kontext. Ansonsten verwende ich HttpContext.Current , nur nicht in meinen Unit-Tests.

    
Erik Philips 02.02.2012 20:22
quelle