如何使用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注入包装类的实例,或者在单元测试中注入模拟对象。 这有点痛苦,但它有效。

链接地址: http://www.djcxy.com/p/59859.html

上一篇: How to inject UrlHelper in MVC using Castle Windsor

下一篇: Castle Windsor Controller Factory and RenderAction