2009-04-06 7 views
25

... बिल्कुल कुछ नहीं?सिस्टम.Web.Abstractions: इसके लिए क्या अच्छा है?

पहेली के किस हिस्से में यह ASP.NET WebForms और क्रमश: ASP.NET MVC के लिए भरने करता है?

क्या आप किसी भी तरह से ASP.NET * बेस-एप्लिकेशन बना सकते हैं जो System.Web.Abstractions का उपयोग करता है ताकि इसका उपयोग दोनों प्रकार के एएसपी.नेट-वेब अनुप्रयोगों में किया जा सके?

उस स्थिति में, उन्होंने System.Web.Abstractions में कक्षाओं को एएसपी.NET वेबफॉर्म में वापस कैसे रेट किया?

आप नामस्थान से ऑब्जेक्ट्स को नए नहीं कर सकते हैं, इसलिए इसका उपयोग मॉकिंग के लिए नहीं किया जा सकता है, है ना?

अद्यतन: इस पर स्पष्ट नहीं होने के लिए खेद है कि मुझे HttpContext और अन्य बिल्ड-एएसपी.NET-ऑब्जेक्ट्स के परीक्षण के साथ समस्या पता है। लेकिन वैसे भी अच्छी व्याख्या के लिए धन्यवाद।

+6

पूरी तरह से बाएं क्षेत्र से बाहर, लेकिन आपके प्रश्न शीर्षक के लिए धन्यवाद, अब मेरे पास मेरे सिर में एडविन स्टार द्वारा युद्ध है। :( –

उत्तर

35

नाम स्थान कि एएसपी रैप करने के लिए तैयार कर रहे हैं प्रकार होते हैं। नेट के मूल वर्ग (जैसे एचटीपी सत्र सत्र)।

क्या, आप जानना चाहते हैं क्यों?

इनमें से कई कोर एएसपी.नेट कक्षाएं सील या स्थैतिक हैं, जिससे उन्हें और आपके कोड के बीच निर्भरता तोड़ना असंभव हो जाता है। इसका मतलब है कि आप इन मूल निर्भरताओं का नकल नहीं कर सकते हैं, जिससे आपके एएसपी.NET कोड का परीक्षण करना मुश्किल हो जाता है। तो, सीधे कोड में सीधे HttpResponse में हेरफेर करने की बजाय, आप HttpResponseWrapper के माध्यम से इसे कुशलतापूर्वक उपयोग करते हैं, जो परीक्षण समय के दौरान, आप HttpResponse ऑब्जेक्ट के व्यवहार को नियंत्रित करने के लिए स्टब या मॉक कर सकते हैं।

यदि आपने कभी इन रैपर बनाने के बारे में सोचा है, या उनमें से एक या दो को लागू किया है, तो आप जानते होंगे कि उस नामस्थान में बहुत सारे काम लपेट गए हैं, और मैं, एक के लिए, खुश हूं कि उन्होंने किया यह।

17

यह वास्तव में मजाक करने के लिए है। - HttpContext एक मुहरबंद वर्ग है और इसे (आसानी से) मजाक नहीं किया जा सकता है। HttpContextBase को बंद नहीं किया गया है और मुझे विश्वास है कि यह विधियां आभासी हैं, जो मजाक कर रही हैं।

आप नए-अप नहीं HttpContextBase का एक उदाहरण (जैसे कि, WebForms में उपयोग के लिए), तो आपको एक उदाहरण के माध्यम से प्राप्त कर सकते हैं सकता है:

var ctx = new HttpContextWrapper(HttpContext.Current); 
संबंधित मुद्दे