.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));