我正在开发一个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();
}
}所以,现在的问题是如何让windsor在中间进行解析。在四处寻找之后,从spring看起来像是在做什么,我想我可以尝试一下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应用程序以将工厂用于as文件,在global.asax中创建容器,使用url作为in配置处理程序,并将容器注册到web缓存中。
你认为这是一个很好的解决方案吗?或者是我在这里遗漏了什么,有没有其他方法可以让容器解析web处理程序?
提前感谢
发布于 2011-03-22 07:04:33
在全局HttpApplication中实现IContainerAccessor以引用容器,而不是将容器存储在缓存中。不需要在CastleWindsorHttpHandlerFactory中存储引用。
除此之外,它看起来还不错。
https://stackoverflow.com/questions/5384355
复制相似问题