2011-03-26 62 views
4

在ASP.NET MVC应用程序中注入Http/Request/Controller上下文有推荐的方法吗?ASP.NET MVC注入Http /请求/控制器上下文

以前我只用HttpContext的像这样做到了这一点(我用StructureMap):

For<HttpContextBase>().Use(ctx => new HttpContextWrapper(HttpContext.Current)); 

然而,在某些情况下,我还需要获得访问请求上下文。不是手动构建,而是注入它会很好。一个好的例子是注入一个UrlHelper(需要RequestContext和RouteCollection)。

感谢

回答

4

你可能要考虑是否真的要依赖于这些方面直接对象(他们往往使依赖于他们难以测试的东西)。这就是说,你在正确的轨道上:

For<RequestContext>().Use(ctx => HttpContext.Current.Request.RequestContext); 
For<RouteCollection>().Use(ctx => RouteTable.Routes); 
+0

嗨罗宾,我一般只拥有这些依赖纯粹的语境对象,例如抽象访问之类的当前用户SiteContext上下文等等。我可以一直嘲笑HttpContextBase无论如何。我也发现这篇文章看起来很有趣 - http://kozmic.pl/2010/05/22/contextual-controller-injection-in-asp-net-mvc-with-castle-windsor/ – 2011-03-29 16:32:42

+0

为什么它会使它难以测试,他们被注入,所以可以被嘲笑吗? (我即将做到这一点,以及我即将做到这一点) – NimChimpsky 2014-04-09 15:48:57