我正在开发一个 RIA 应用程序,其中客户端上有 javascript(我正在使用 Ext)和服务器上的 .NET,对于 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;
}
将 Web 应用程序配置为使用 ashx 文件的工厂,并在 global.asax 中创建容器,使用 url 作为 id 配置处理程序,并将容器注册到 Web 缓存中。
您认为这是一个不错的解决方案吗?或者我在这里缺少什么,是否有另一种方法可以让容器解析 Web 处理程序?
预先感谢