2012-02-02 11 views
8

ポストhereの誰かが、MVCを使用するときはHttpContext.Currentを使用すべきではないとコメントしました。むしろControllerBase.ControllerContextを使用してください。いくつかの点では、これは理にかなっていますが、他の点ではそうではありません。MVC、HttpContext.Currentの使用を「想定」していませんか?

例えば、ControllerContextはインスタンス変数なので、どこでも、私のセッション変数を参照したいと思っています。コントローラへの参照が必要ですか? MVCでHttpContext.Currentを使用していると思われるのはなぜですか?コントローラへの参照を持たなくても、セッションオブジェクトにアクセスするための「適切な」MVC「方法」はありますか?

私はテストの賢明さを知っていますが、これは他の多くの場所で述べられている理由により優れていますが、セッション変数と参照を管理するプロジェクトに取り組んでいます.HttpContext.Currentと私は、コントローラへの参照を渡さずにセッションオブジェクトに手を差し伸べてください。

答えて

7

HttpContext.Currentを使用すると単体テストが非常に困難になるのは、通常のモックフレームワークを使用してこの値を嘲笑することができないためです。

HttpContext.Currentも悪用され、悪用される可能性があるため、より脆いコードになります。たとえば、ビジネスレイヤーで使用すると便利ですが、ASP.NET以外の代替プレゼンテーションレイヤーを使用すると破損します。

一般に、静的メソッドは依存性注入になることはできません。

1

あなたの1つの投稿はMockテストに起因していました.Mockに依存するHttpContextはコントローラコンテキストのみであるかもしれません。それ以外の場合は、HttpContext.Currentを使用します。単体テストではありません。

関連する問題