我有一個組件對UrlHelper具有依賴性,我需要使用Castle Windsor進行註冊。 UrlHelper依次對RequestContext(和RouteCollection)進行depdendencies。如何使用Castle Windsor在MVC中注入UrlHelper
現在我的控制器有一個類型爲UrlHelper的Url屬性,但根據我的情況我無法真正訪問它。
什麼是最有效的方式來註冊我的UrlHelper依賴(使用流暢的配置)?
我有一個組件對UrlHelper具有依賴性,我需要使用Castle Windsor進行註冊。 UrlHelper依次對RequestContext(和RouteCollection)進行depdendencies。如何使用Castle Windsor在MVC中注入UrlHelper
現在我的控制器有一個類型爲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));
}));
溫莎的未來版本將不需要FactorySupportFacility使用UsingFactoryMethod。
反正它似乎很奇怪,有一個依賴於UrlHelper ...
我發現要做到這一點的唯一方法是聲明一個IUrlHelper
接口,並實現一個實現它的包裝類UrlHelper
。然後,我們可以使用IOC注入包裝類的實例,或者在單元測試中注入模擬對象。這有點痛苦,但它有效。
我的博客上講述它(除其他事項外)前幾天here。它適用於(即將到來的)溫莎2.5。在此之前,Mauricio的建議應該是你最安全的選擇。
謝謝,這幾乎是我結束了。 我在OutputCacheHelper類中使用UrlHelper,該類可以使用例如下列命令從緩存中刪除頁面:_response.RemoveOutputCacheItem(_urlHelper.RouteUrl(「Home」)); 這是由多個控制器使用,所以它似乎有意義將它重構成一個單獨的類,它依賴於HttpRequestBase和UrlHelper。這不好嗎? – 2010-06-03 08:25:40
@Mauricio Scheffer:爲什麼看起來很奇怪?你應該如何在服務中生成URL?假設您需要在電子郵件發送服務中將URL粘貼到電子郵件中?你會怎麼做? – mattalxndr 2013-09-25 23:20:10