2012-02-02 14 views
8

Qualcuno in un post here, ha commentato che non si dovrebbe utilizzare HttpContext.Current quando si utilizza MVC, piuttosto, si dovrebbe usare ControllerBase.ControllerContext. Per certi aspetti, questo ha senso, ma per altri aspetti non è così.MVC, non "supposto" di utilizzare HttpContext.Current più?

Ad esempio, ControllerContext è una variabile di istanza, quindi ovunque voglio fare riferimento, ad esempio, alle variabili Session, ho bisogno di avere un riferimento al Controller? Perché "non dovremmo" utilizzare HttpContext.Current in MVC, quando è ancora possibile? Esiste un "modo" MVC "appropriato" per accedere al mio oggetto Session senza dover avere un riferimento al Controller?

Conosco il test, è meglio per le ragioni dichiarate in molti altri luoghi, ma sto lavorando a un progetto che gestisce le variabili di sessione e riferimenti HttpContext.Current e voglio sapere se c'è un modo migliore per ottenere le mie mani sull'oggetto Session senza passare un riferimento al controller.

risposta

7

Questo è principalmente perché test di unità sarebbe molto difficile se si utilizza HttpContext.Current poiché il mocking di questo valore non è possibile utilizzando i normali framework mock.

HttpContext.Current rende anche il codice più fragile in quanto può essere abusato e utilizzato in modo improprio. Ad esempio, è possibile utilizzarlo nel livello aziendale poiché è comodo ma si interromperà se si sceglie di utilizzare un livello di presentazione alternativo diverso da ASP.NET.

Generalmente i metodi statici sono oggigiorno disapprovati dal momento che non possono essere immesso in dipendenza.

1

Il tuo post era dovuto a test di simulazione, in cui, a seconda del Mock, potrebbe non esserci un HttpContext, solo un contesto di controller. Altrimenti, io uso HttpContext.Current, non solo nei miei test di unità.

Problemi correlati