সহজ উপায় হ'ল অ্যাপ্লিকেশনটি পাওয়া 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
সময় এবং এটি প্রথমে নকল / স্টাবের পক্ষে অসম্ভব is এই উত্তরের মূল বিষয়টি, তবে এই প্রশ্নটি সম্বোধন করা, "আমি কীভাবে এইচটিটিপি কনটেক্সটবেস থেকে একটি এইচটিপিপেক্সটেক্সট অবজেক্ট পাব?", আক্ষরিকভাবে । ইলাস্ট্রেটেড টেকনিক সেই পরিস্থিতিতে কার্যকর যেখানে আপনি নিজেকে এমন উপাদানগুলির মধ্যে স্যান্ডউইচড খুঁজে পান যেখানে আপনার প্রয়োজনীয় সংশোধন করার বিলাসিতা থাকে না।