सबसे सरल तरीका है आवेदन प्राप्त करना 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) { /* ... */ }
HttpContextBase
GetService
समर्थन के परिणामस्वरूप एक विधि कहलाती है IServiceProvider
। लिपटे उदाहरण के कार्यान्वयन के लिए प्रतिनिधियों का GetService
ओवरराइड । के कार्यान्वयन की तरह सामान्य संदिग्धों के लिए क्वेरी करने की अनुमति देता , , और इतने पर। यह सिर्फ इतना होता है कि एक संपत्ति होती है जिसे कॉनटेक्स्ट कहा जाता है और जो इसका एक उदाहरण देता है । तो एक लिपटे पर हो जाता है पूछकर उदाहरण के लिए के माध्यम से पढ़ने के बाद लौट आए की संपत्ति उदाहरण।HttpContextWrapper
GetService
HttpContext
GetService
HttpContext
HttpApplication
HttpRequest
HttpResponse
HttpApplication
HttpContext
HttpContext
HttpContextBase
HttpApplication
GetService
Context
HttpApplication
विपरीत HttpContextBase
, GetService
की एक सार्वजनिक सदस्य के रूप में प्रकट नहीं होता है HttpContext
, लेकिन है कि क्योंकि है HttpContext
औजार IServiceProvider.GetService
स्पष्ट रूप से, जबकि HttpContextBase
ऐसा नहीं करता।
ध्यान रखें कि Foo
अब परीक्षण योग्य नहीं है क्योंकि यह HttpContext
परीक्षण के दौरान अंतर्निहित को उजागर करने में सक्षम होने पर निर्भर करता है और जो पहले स्थान पर नकली / ठूंठ के लिए असंभव है। इस जवाब की बात है, तथापि, प्रश्नों के उत्तरों, "मैं HttpContextBase से एक HttpContext वस्तु कैसे मिलता है?" है, सचमुच । सचित्र तकनीक उन स्थितियों में उपयोगी होती है, जहां आप अपने आप को उन घटकों के बीच पाले हुए होते हैं, जिन्हें आपको संशोधित करने की आवश्यकता नहीं होती है।