如何使用Castle Windsor在MVC中注入UrlHelper
我有一个组件依赖于UrlHelper,我需要使用Castle Windsor进行注册。 UrlHelper依次对RequestContext(和RouteCollection)进行depdendencies。
现在我的控制器有UrlHelper类型的Url属性,但无法真正地访问这个据我所知。
什么是最有效的方式来注册我UrlHelper依赖项(使用流畅的配置)?
不漂亮,没有测试,但它应该工作:
container.AddFacility<FactorySupportFacility>();
container.Register(Component.For<UrlHelper>()
.LifeStyle.PerWebRequest
.UsingFactoryMethod(() => {
var context = new HttpContextWrapper(HttpContext.Current);
var routeData = RouteTable.Routes.GetRouteData(context);
return new UrlHelper(new RequestContext(context, routeData));
}));
Windsor的未来版本将不需要FactorySupportFacility来使用UsingFactoryMethod。
无论如何,它有一个依赖UrlHelper似乎很奇怪...
我在几天前在这里博客了(除其他外)。 它适用于(即将到来的)温莎2.5。 在此之前,Mauricio的建议应该是你最安全的选择。
我发现要做到这一点的唯一方法是声明一个IUrlHelper
接口,并围绕实现它的UrlHelper
实现一个包装类。 然后,我们可以使用IOC注入包装类的实例,或者在单元测试中注入模拟对象。 这有点痛苦,但它有效。