En basit yol, uygulamayı almak ApplicationInstance
ve Context
özelliğini kullanmaktır :
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
( yorumlarda bunu kaydeden İshmael Smyrnow'a teşekkürler )
Orijinal cevap:
Özellikle HttpContextBase
teslim ettiğiniz örnek HttpContextWrapper
çalışma zamanında türdeyse yapabilirsiniz. Aşağıdaki örnekte bunu nasıl yapabileceğiniz gösterilmektedir. Foo
Bağlamı kabul eden, HttpContextBase
ancak üçüncü taraf bir derlemede (değiştirmek için iyi şansa sahip olamayacağınız) bir yöntemin çağrılmasını bekleyen bir yöntem çağırmanız gerektiğini varsayar 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
destekleme olarak adlandırılan bir yöntemi vardır IServiceProvider
. GetService
Bir geçersiz kılma HttpContextWrapper
delege GetService
sarılmış uygulanması HttpContext
örneği. GetService
Uygulanması HttpContext
gibi olağan şüpheliler için sorguya izin verir HttpApplication
, HttpRequest
, HttpResponse
vb. Sadece ContextHttpApplication
adında bir özelliğe sahip olan ve bir örneği döndüren bu olur . Yani bir sarılmış de alır sorarak Örneğin için aracılığıyla okuyarak takip döndürülen özelliği örneği.HttpContext
HttpContext
HttpContextBase
HttpApplication
GetService
Context
HttpApplication
Aksine HttpContextBase
, GetService
bir kamu üyesi olarak görünmüyor HttpContext
ama olmalarındandır HttpContext
uygular IServiceProvider.GetService
explicity süre HttpContextBase
değil.
Foo
Artık test edilemediğini unutmayın, çünkü HttpContext
test sırasında altta yatan şeyi açabilmeye dayanır ve ilk etapta sahte / saplama yapmak imkansızdır. Ancak bu cevabın amacı, “HttpContextBase'den bir HttpContext nesnesini nasıl alabilirim?” Sorusunu tam anlamıyla ele almaktır . Gösterilen teknik, kendinizi değiştirmek için lükse sahip olmadığınız bileşenler arasında kendinizi sandviç bulduğunuz durumlarda kullanışlıdır.