2012-02-02 51 views
8

here पोस्ट में से किसी ने टिप्पणी की है कि आपको एमवीसी का उपयोग करते समय HttpContext.Current का उपयोग नहीं करना चाहिए, बल्कि आपको ControllerBase.ControllerContext का उपयोग करना चाहिए। कुछ मामलों में, यह समझ में आता है, लेकिन अन्य मामलों में यह नहीं करता है।एमवीसी, अब "माना" नहीं है HttpContext.Current का उपयोग करने के लिए?

उदाहरण के लिए, नियंत्रक कॉन्टेक्स्ट एक आवृत्ति चर है, इसलिए हर जगह मैं संदर्भ देना चाहता हूं, कहें, मेरे सत्र चर, मुझे नियंत्रक का संदर्भ होना चाहिए? हम एमवीसी में HttpContext.Current का उपयोग क्यों नहीं कर रहे हैं, जब भी आप कर सकते हैं? नियंत्रक के संदर्भ के बिना मेरे सत्र ऑब्जेक्ट पर जाने के लिए कोई "उपयुक्त" एमवीसी "तरीका" है?

मुझे परीक्षण के अनुसार पता है, यह कई अन्य स्थानों में बताए गए कारणों के लिए बेहतर है, लेकिन मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जो सत्र चर और संदर्भों का प्रबंधन करता है HttpContext.Current और मैं जानना चाहता हूं कि क्या एक बेहतर तरीका है नियंत्रक के संदर्भ को पारित किए बिना सत्र वस्तु पर मेरे हाथ।

उत्तर

7

यह मुख्य रूप से तब होता है जब आप HttpContext.Current का उपयोग करते हैं तो यूनिट परीक्षण बहुत कठिन होगा क्योंकि सामान्य मूल्य नकली ढांचे का उपयोग करके यह मान संभव नहीं है।

HttpContext.Current भी अधिक भंगुर कोड बनाता है क्योंकि इसका दुरुपयोग और दुरुपयोग किया जा सकता है। उदाहरण के लिए, आप इसे व्यावसायिक परत में उपयोग कर सकते हैं क्योंकि यह सुविधाजनक है लेकिन यदि आप ASP.NET के अलावा वैकल्पिक प्रस्तुति परत का उपयोग करना चुनते हैं तो यह टूट जाएगा।

आम तौर पर स्थिर तरीके आजकल फंसे हुए हैं क्योंकि वे निर्भरता-इंजेक्शन नहीं हो सकते हैं।

1

आपकी एक पोस्ट मॉक परीक्षण के कारण थी, जहां मॉक के आधार पर एक HttpContext, केवल एक नियंत्रक संदर्भ नहीं हो सकता है। अन्यथा, मैं HttpContext.Current का उपयोग करता हूं, बस मेरे यूनिट परीक्षणों में नहीं।