У меня есть компонент, который имеет зависимость от UrlHelper, что я должен зарегистрировать замок использования Windsor. UrlHelper в свою очередь имеет depdendencies на RequestContext (и RouteCollection).
Теперь мой контроллер имеет свойство Url типа UrlHelper, но не может действительно получить доступ к этому насколько я могу сказать.
Что самый эффективный путь состоит в том, чтобы зарегистрировать мою зависимость 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 кажется довольно странной ...
Я писал об этом (среди прочего) несколько дней назад здесь . Он работает с (готовящейся к выпуску) Windsor 2.5. А пока предложение Маурисио должно быть вашим самым безопасным выбором.
Я нашел единственный способ сделать это - объявить интерфейс IUrlHelper
и реализовать класс-оболочку вокруг UrlHelper
, который его реализует. Затем мы можем либо внедрить экземпляр класса-оболочки с помощью IOC, либо в модульных тестах ввести фиктивный объект. Это немного неудобно, но работает.