Как ввести UrlHelper в замке использования MVC Windsor

У меня есть компонент, который имеет зависимость от UrlHelper, что я должен зарегистрировать замок использования Windsor. UrlHelper в свою очередь имеет depdendencies на RequestContext (и RouteCollection).

Теперь мой контроллер имеет свойство Url типа UrlHelper, но не может действительно получить доступ к этому насколько я могу сказать.

Что самый эффективный путь состоит в том, чтобы зарегистрировать мою зависимость UrlHelper (использующий быструю конфигурацию)?

6
задан Paul Hiles 2 June 2010 в 13:47
поделиться

3 ответа

Неприятно и не тестировалось, но должно работать:

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 кажется довольно странной ...

7
ответ дан 9 December 2019 в 22:29
поделиться

Я писал об этом (среди прочего) несколько дней назад здесь . Он работает с (готовящейся к выпуску) Windsor 2.5. А пока предложение Маурисио должно быть вашим самым безопасным выбором.

3
ответ дан 9 December 2019 в 22:29
поделиться

Я нашел единственный способ сделать это - объявить интерфейс IUrlHelper и реализовать класс-оболочку вокруг UrlHelper , который его реализует. Затем мы можем либо внедрить экземпляр класса-оболочки с помощью IOC, либо в модульных тестах ввести фиктивный объект. Это немного неудобно, но работает.

1
ответ дан 9 December 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: