2

我正在开发一个 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 处理程序?

预先感谢

4

1 回答 1

2

不要将容器存储在缓存中,而是IContainerAccessor在全局 HttpApplication 中实现以引用您的容器。无需将引用存储在CastleWindsorHttpHandlerFactory.

除此之外,它看起来不错。

于 2011-03-21T23:04:32.933 回答