我正在開發一個RIA應用程序,其中有客戶端上的JavaScript(我使用分機)和服務器上的.NET,對於json-rpc我使用Jayrock這是一個不錯的圖書館(至少對我來說),因爲它很簡單,運作良好,我過去曾使用它。城堡windsor和IHttpHandler和IHttpHandlerFactory
Jayrock使用Web Handlers來處理json-rpc請求,你編寫一個實現IHttpHandler的類,並從具有某些屬性的Jayrock類派生出來,剩下的工作就是爲瀏覽器提供一個JavaScript類來完成它的魔法。
現在,一般的網絡處理器將具有無參數的構造函數,但我想用DI他們,並使用溫莎解決依賴我
所以,我會有一些類像下面
public class VistaEntidadSimpleServer : JsonRpcVistaHandler ,IHttpHandler
{
public VistaEntidadSimpleServer(ISomeDependecy someObject)
{
someObject.doSomething();
}
[JsonRpcMethod("Aceptar")]
public string Aceptar (IVista vista)
{
throw new NotImplementedException();
}
[JsonRpcMethod("Cancelar")]
public string Cancelar (IVista vista)
{
throw new NotImplementedException();
}
public IVista CargarDatos(IVista vista)
{
throw new System.NotImplementedException();
}
}
所以,現在的問題是如何讓Windsor在中間做解決。摸索,並從它似乎做春天之後,我想我可以給一個嘗試IHttpHandlerFactory和代碼像這樣
public class CastleWindsorHttpHandlerFactory : IHttpHandlerFactory
{
public CastleWindsorHttpHandlerFactory()
{
if (container==null)
container=(IWindsorContainer)HttpRuntime.Cache.Get("Container");
}
#region IHttpHandlerFactory implementation
public IHttpHandler GetHandler (HttpContext context, string requestType, string url, string pathTranslated)
{
return container.Resolve<IHttpHandler>(url);
}
public void ReleaseHandler (IHttpHandler handler)
{
container.Release(handler);
}
#endregion
private static IWindsorContainer container=null;
}
配置Web應用程序使用工廠ashx的文件,並創建global.asax中的容器,將url作爲id的處理程序配置,並將包含器註冊到Web緩存中。
您認爲這是一個不錯的解決方案嗎?或者是有什麼我在這裏失蹤,有沒有另一種方法來獲得容器解決Web處理程序?在advancce
我在遇到您的建議時遇到問題。我不知道如何從IHttpHandlerFactory的ReleaseHandler方法訪問容器。在GetHandler方法中,您獲得了作爲參數傳入的HttpContext的引用(並因此引用了HttpApplication/IcontainerAccessor實例),但ReleaseHandler方法中不是這種情況。當我嘗試使用ReleaseHandler中的HttpContext.Current時,WebApp只是靜靜地死去。關於如何在ReleaseHandler方法中獲取IContainerAccessor,您有任何建議嗎? – JohannesH 2013-02-21 07:46:41
@JohannesH創建一個新問題或在https://groups.google.com/forum/#!forum/castle-project-users – 2013-02-21 13:30:09
發佈好吧,我會的。雖然我會說我通過將容器存儲在GetHandler方法的本地字段中來解決此問題。然而,它似乎有點脆弱,因爲我不確定這些方法總是被連續調用......它並沒有真正的記錄。 – JohannesH 2013-02-22 16:54:16