tutorial route net ihttpactionresult example attribute asp apicontroller .net asp.net-web-api structuremap

.net - route - web api return json example



WebAPI+APIController con structureMap (2)

Estoy tratando de usar StructureMap para inicializar mi ValuesController que se deriva de ApiController pero recibo una excepción que dice:

El IControllerFactory ''... CustomControllerFactory'' no devolvió un controlador para el nombre ''api''.

Aquí está el código ...

public class CustomControllerFactory : DefaultControllerFactory { protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { if (controllerType == null) return null; return (Controller)ConcretizationsManager.GetInstance(controllerType); } }

básicamente ConcretizationsManager es un contenedor de StructureMap .. Este método siempre funciona bien para los controladores de tipo controlador, pero para APIController no.

¿Alguien para llevarme a la dirección correcta? Muchas gracias


Hay un soporte de primera parte para esto con StructureMap 3

nuget instala Structuremap.WebApi2

StructureMap 4 ha sido lanzado y podría ser utilizado también, sin embargo, puede haber pequeños ajustes necesarios . No lo he confirmado por mí mismo.


Para la API web estoy usando Custom ServiceActivator de esta manera (es decir, diferente de la fábrica y luego para MVC):

public class ServiceActivator : IHttpControllerActivator { public ServiceActivator(HttpConfiguration configuration) {} public IHttpController Create(HttpRequestMessage request , HttpControllerDescriptor controllerDescriptor, Type controllerType) { var controller = Factory.CreateInstance(controllerType) as IHttpController; return controller; } }

Donde Factory es mi envoltorio de la API de Sturcturemap

Y en App_Start/WebApiConfig.cs lo registro así:

config.Services.Replace(typeof(IHttpControllerActivator), new ServiceActivator(config));