2012-02-11 17 views
0

私は次のコードを持っています(hereから持ち上げました)、私はモノラル2.10.5のLinuxサーバーでそれを実行しようとしています。モノで実行する場合モノラルでHttpContext.GetService

private static HttpContext GetCurrentContext(ControllerContext context) { 
    var currentApplication = (HttpApplication)context.HttpContext.GetService(typeof(HttpApplication)); 
    if (currentApplication == null) { 
     throw new NullReferenceException("currentApplication"); 
    } 

    return currentApplication.Context; 
} 

、私は十分に簡単です、次の例外を取得:

System.NotImplementedException: The requested feature is not 
implemented. at System.Web.HttpContextWrapper.GetService 
(System.Type serviceType) [0x00000] in <filename unknown>:0 

は、私はモノで同じ結果を達成するために使用できる既知の回避策はありますか?モノラルでGetService方法がありますがを解除したコードわからない

答えて

3

は次のように短縮することができます

private static HttpContextBase GetCurrentContext(ControllerContext context) { 
    return context.HttpContext; 
} 

は、あなたが本当にフェッチするために、アプリケーションを通過する必要はありませんのHttpContextあなたがそれに直接アクセスできるとき。 ASP.NET MVCでは常に抽象クラスを使用することが推奨されているため、HttpContextの代わりに戻り値の型をHttpContextBaseに変更しました。それはあなたのコードをより弱く結合し、ユニットをテスト可能にします。

private static HttpContext GetCurrentContext(ControllerContext context) { 
    return context.HttpContext.ApplicationInstance.Context; 
} 

しかし、あなたのように:

それとも、(誰かがそれに自分のコードを結びたい理由がないアイデア)は、次の試みることができる実際のHttpContextで仕事をしたいいくつかの私には不明な理由であれば

両方の場合に、この GetCurrentContext静的メソッドの存在がかなり疑わしくなります。

+0

盗まれた権利よりも音が良くなりました;)途中でGetServiceを使用してHttpContextBaseをHttpContextに変換しています(ELMAHの必要に応じて)。この記事(http://stackoverflow.com/a/4567707/794)のコメントから、context.HttpContext.ApplicationInstance.Contextはトリックを行い、モノで作業するように見えます。あなたの答えを編集したい場合は、私はそれを受け入れます。 – AlexCuse