この場合、「注入」は必要ないかもしれません。私は良いテスト容易性のために、最もクリーンなソリューションはあなたのリクエストを嘲笑するだろうと思います。 (Moqライブラリを使用)例:
public MyController() : this(DefaultHostGetter) { }
public MyController(Func<string> hostGetter)
{
this.hostGetter = hostGetter;
}
private string DefaultHostGetter() { return this.Request.Url.Host; }
ビューのアクションは、次のようになります:
public ViewResult Show(int id)
{
string host = this.hostGetter();
....
}
あなたは次のようになります。また、そのようなあなたのコントローラのためのいくつかのコンストラクタを使用することができ
var request = new Mock<HttpRequestBase>();
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/any"));
var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new YourController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
テスト容易性のための大きな課題! +1! –