クライアントにjavascript(Extを使用)とサーバーに.NETがあるRIAアプリケーションを開発しています。json-rpcには、(少なくとも私にとっては)優れたライブラリであるJayrockを使用しています。シンプルでうまく機能します、私は過去にそれを使用しました。
JayrockはWebハンドラーを使用してjson-rpcリクエストを処理し、IHttpHandlerを実装し、いくつかの属性を持つJayrockクラスから派生するクラスをコーディングし、残りはブラウザーにjavascriptクラスを提供してその魔法を実行します。
これで、通常、Webハンドラーにはパラメーターのないコンストラクターがありますが、それらにDIを使用し、windsorを使用して依存関係を解決したいと思います。
だから、私は次のようないくつかのクラスを持っています
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();
}
}
だから、今問題は、解決を行うためにウィンザーを真ん中に置く方法です。周りを検索した後、春のように見えることから、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;
}
ashxファイルにファクトリを使用するようにWebアプリを構成し、global.asaxにコンテナーを作成し、URLをIDとしてハンドラーを構成し、コンテナーをWebキャッシュに登録します。
これは素晴らしい解決策だと思いますか?または、ここで欠けているものがありますか?コンテナーによってWebハンドラーを解決する別の方法はありますか?
進歩してくれてありがとう