सबसे सरल तरीका है आवेदन प्राप्त करना ApplicationInstance, और अपनी Contextसंपत्ति का उपयोग करना :
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
( इश्माएल स्मरनॉव के लिए धन्यवाद जिन्होंने टिप्पणियों में यह नोट किया)
मूल उत्तर:
आप कर सकते हैं, खासकर अगर HttpContextBaseआपके द्वारा दिया गया उदाहरण HttpContextWrapperरन-टाइम पर टाइप का हो। निम्न उदाहरण दिखाता है कि आप यह कैसे कर सकते हैं। यह Fooमान लेता है कि आपके पास एक ऐसी विधि है जिसे संदर्भ कहा जाता है, HttpContextBaseलेकिन फिर तीसरे पक्ष की विधानसभा में एक विधि को कॉल करने की आवश्यकता है (जिसे आपको संशोधित करने का सौभाग्य नहीं मिल सकता है) जो संदर्भ के रूप में टाइप होने की उम्मीद कर रहा है HttpContext।
void Foo(HttpContextBase context)
{
var app = (HttpApplication) context.GetService(typeof(HttpApplication));
ThirdParty.Bar.Baz(app.Context);
}
// Somewhere in assembly and namespace ThirdParty,
// in a class called Bar, there is Baz expecting HttpContext:
static void Baz(HttpContext context) { /* ... */ }
HttpContextBaseGetServiceसमर्थन के परिणामस्वरूप एक विधि कहलाती है IServiceProvider। लिपटे उदाहरण के कार्यान्वयन के लिए प्रतिनिधियों का GetServiceओवरराइड । के कार्यान्वयन की तरह सामान्य संदिग्धों के लिए क्वेरी करने की अनुमति देता , , और इतने पर। यह सिर्फ इतना होता है कि एक संपत्ति होती है जिसे कॉनटेक्स्ट कहा जाता है और जो इसका एक उदाहरण देता है । तो एक लिपटे पर हो जाता है पूछकर उदाहरण के लिए के माध्यम से पढ़ने के बाद लौट आए की संपत्ति उदाहरण।HttpContextWrapperGetServiceHttpContextGetServiceHttpContextHttpApplicationHttpRequestHttpResponseHttpApplicationHttpContextHttpContextHttpContextBaseHttpApplicationGetServiceContextHttpApplication
विपरीत HttpContextBase, GetServiceकी एक सार्वजनिक सदस्य के रूप में प्रकट नहीं होता है HttpContext, लेकिन है कि क्योंकि है HttpContextऔजार IServiceProvider.GetServiceस्पष्ट रूप से, जबकि HttpContextBaseऐसा नहीं करता।
ध्यान रखें कि Fooअब परीक्षण योग्य नहीं है क्योंकि यह HttpContextपरीक्षण के दौरान अंतर्निहित को उजागर करने में सक्षम होने पर निर्भर करता है और जो पहले स्थान पर नकली / ठूंठ के लिए असंभव है। इस जवाब की बात है, तथापि, प्रश्नों के उत्तरों, "मैं HttpContextBase से एक HttpContext वस्तु कैसे मिलता है?" है, सचमुच । सचित्र तकनीक उन स्थितियों में उपयोगी होती है, जहां आप अपने आप को उन घटकों के बीच पाले हुए होते हैं, जिन्हें आपको संशोधित करने की आवश्यकता नहीं होती है।