Я разрабатываю приложение RIA, где на клиенте есть javascript (я использую Ext) и на сервере .NET, для json-rpc я использую Jayrock, которая является хорошей библиотекой (по крайней мере для меня)) поскольку он прост и работает хорошо, я уже использовал его в прошлом.
Jayrock использует веб-обработчики для обслуживания запроса json-rpc, вы кодируете класс, который реализует IHttpHandler и является производным от класса Jayrock с некоторыми атрибутамии он делает все остальное, чтобы предоставить javascript-класс браузеру для выполнения своей магии.
Теперь обычно веб-обработчики имеют конструкторы без параметров, но я хочу использовать 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, исоздание контейнера в global.asax, настройка обработчиков с URL-адресом в качестве идентификаторов и регистрация контейнера в веб-кеше.
Как вы думаете, это хорошее решение?Есть ли другой способ разрешить веб-обработчики в контейнере?
Спасибо за продвижение