2012-08-09 11 views
7

Estamos tratando de reemplazar DefaultControllerFactory anterior con la nueva API web ASP.NET para manejar mejor las llamadas REST/XML. La búsqueda en la web siempre apuntó a la implementación de System.Web.Http.Dependencies.IDependencyResolver y luego a la manipulación del GetService() y algunos otros métodos requeridos por la interfaz.¿Cuál es el equivalente de DefaultControllerFactory en Web API?

Sin embargo, parece que está almacenando en caché la instancia de ApiController y cualquier controlador nuevo, parece que no se está resolviendo. Es difícil proporcionar todas las instancias posibles de ApiController durante el inicio debido a problemas de rendimiento.

DefaultControllerFactory permite proporcionar instancias de controlador y almacena en caché las entradas de "aciertos", pero arroja errores cuando no se puede cargar con retraso una instalación.

¿Existen otros métodos de sobrecarga/controladores que se deben implementar?

La búsqueda no produjo ningún éxito hasta el momento, pero cualquier puntero será genial. Gracias por tu tiempo.

+0

DefaultControllerFactory es a partir de beta, no en RC más, por favor ¿podría usted explicar más "para mejor manejo RESTO llamada/XML lo que quiere manejar –

+0

Utilizando el valor por defecto? Controlador de fábrica, un controlador se carga dinámicamente bajo demanda. Este controlador tiene métodos para reparar ambos formatos xml/json usando diferentes API (tiene sufijos json o xml). Administrar los equivalentes que esencialmente está haciendo lo mismo se está convirtiendo en un problema. API web parece para cuidar los formatos de medios y queremos moverlos a este modelo, pero cargar el controlador dinámicamente parece ser un problema. – sraj

+1

si desea utilizar json/xsml sufi xes, ¿por qué no aprovechar en UriPathExtensionMapping? –

Respuesta

7

Es IHttpControllerActivator implementado por DefaultHttpControllerActivator.

Es posible que lo reemplaza usando:

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), 
     new MyOwnActivatior()); 

Ups!

Quise decir IHttpControllerSelector!


Se está IHttpControllerSelector implementadas por DefaultHttpControllerSelector.

Es posible que lo reemplaza usando:

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), 
     new MyOwnActivatior()); 
+1

Gracias. Esto funciona si el controlador existe en el conjunto. Sin embargo, tenemos la necesidad de cargar dinámicamente el controlador según la solicitud realizada. En este caso, la llamada no entra en el activador del controlador. Por ejemplo. http: // localhost: 9999/api/customapi/get/1 funciona si existe un tipo con el nombre "CustomAPIController" en el ensamblado. Sin embargo, http: // localhost: 9999/api/customapidynamic1/get/1 no parece llamar al método Create() del activador del controlador. El uso previsto es encontrar la carga del tipo de controlador a pedido. – sraj

+3

Luego puede necesitar reemplazar uno o más de los siguientes: IHttpControllerSelector (selecciona el controlador), IHttpControllerTypeResolver (proporciona la lista de tipos de controladores para IHttpControllerSelector), IAssembliesResolver (proporciona la lista de ensamblajes). Consulte http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection –

+0

Gracias MikeWasson.Intentará más de estas interfaces. Ojalá no hubiera sido tan difícil. – sraj

Cuestiones relacionadas