El controlador de la API web de ASP.Net MVC 4 no funciona con Unity.WebApi

Mi controlador ASP.Net MVC 4 Web API no funciona con Unity.WebApi. En el mismo proyecto, los controladores simples funcionan correctamente con Unity.Mvc3. Pero cuando ejecuto el controlador de API web derivado de ApiController, recibo un mensaje:

{“$ id”: “1”, “Mensaje”: “Ha ocurrido un error.”, “Mensaje de excepción”: “Tipo ‘ElectricTests.Controllers.Api.DocumentsController’ no tiene un constructor predeterminado”, “Tipo de excepción”: ” System.ArgumentException “,” StackTrace “:” en System.Linq.Expressions.Expression.New (Type type) \ r \ n at System.Web.Http.Internal.TypeActivator.Create [TBase] (Type instanceType) \ r \ n en System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator (solicitud HttpRequestMessage, tipo de ejercicio) y en el estado de la actividad. ) “}

Mi ApiController:

public class DocumentsController : ApiController { private readonly IDocumentsRepository _repository; public DocumentsController(IDocumentsRepository repository) { _repository = repository; } public IEnumerable GetFormattedDocuments() { return _repository.GetAllFormattedDocuments(); } ... 

Bootstrapper.cs:

 public static class Bootstrapper { public static void Initialise() { IUnityContainer container = BuildUnityContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); } private static IUnityContainer BuildUnityContainer() { var container = new UnityContainer(); // register all your components with the container here // it is NOT necessary to register your controllers // eg container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); return container; } } 

¿Dónde está mi error?

El manejo de Controller y ApiController es diferente ya que tienen clases base completamente diferentes:

Yo uso la biblioteca Unity.MVC4 para el controlador DI ( http://www.nuget.org/packages/Unity.MVC4/ )

 Install-Package Unity.MVC4 

y Unity.WebAPI para DI ( http://www.nuget.org/packages/Unity.WebAPI/ )

 Install-Package Unity.WebAPI 

Tu bootstrapper debe ser una combinación de ambos:

 DependencyResolver.SetResolver(new Unity.Mvc4.UnityDependencyResolver(container)); GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); 

Tenga en cuenta que también tuve que hacer para agregar algún registro para que la página de Ayuda funcione.

 container.RegisterInstance(typeof (HttpConfiguration), GlobalConfiguration.Configuration); 

Como propietario de Unity.MVC4, estoy buscando la implementación de WebApi en nuestra biblioteca.

Cuando instala la API web de Unity for ASP.NET, hace todo excepto agregar la siguiente línea a su Global.asax

 Bootstrapper.Initialise(); 

Así que necesitas agregar eso a tu método Application_Start:

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); Bootstrapper.Initialise(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }