Unity IoC no inyecta dependencia en el controlador de API web
Soy muy nuevo en el uso de Unity, pero mi problema es que cada vez que llamo a mi servicio web, recibo una excepción que indica que
"Asegúrese de que el controlador tenga un constructor público sin parámetros"
He seguido varios tutoriales y sigo teniendo el mismo problema.
En la función de registro de mi clase WebApiConfig, tengo
var container = new UnityContainer();
container.RegisterType<IValidator, Validator>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
Aquí está mi clase UnityResolver
using Microsoft.Practices.Unity;
using System;
using System.Collections.Generic;
using System.Web.Http.Dependencies;
public class UnityResolver : IDependencyResolver
{
protected IUnityContainer container;
public UnityResolver(IUnityContainer container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
this.container = container;
}
public object GetService(Type serviceType)
{
try
{
return container.Resolve(serviceType);
}
catch (ResolutionFailedException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return container.ResolveAll(serviceType);
}
catch (ResolutionFailedException)
{
return new List<object>();
}
}
public IDependencyScope BeginScope()
{
var child = container.CreateChildContainer();
return new UnityResolver(child);
}
public void Dispose()
{
container.Dispose();
}
}
No he registrado ningún controlador, ya que cada tutorial afirma que no necesito hacer esto. Aquí está mi controlador real
public class Controller: ApiController
{
private IValidator _validator;
public Controller(IValidator validator)
{
this._validator = validator;
}
[HttpPost]
public void ReceiveIPN()
{
}
}
¿Alguien tiene alguna idea de lo que puedo estar haciendo mal? ¡Gracias!
EDITAR 1: Aquí está la "implementación" de la clase Validator. Está bastante vacío, porque no quería introducir un error aquí hasta que resolviera el problema de Unity.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class Validator: IValidator
{
public bool ValidateIPN(string body)
{
throw new NotImplementedException();
}
}
EDITAR 2: Aquí está la respuesta de error completa que recibo cuando intento llamar a la ruta de la API web usando Fiddler
{"message": "Se ha producido un error", "exceptionMessage": "Se produjo un error al intentar crear un controlador de tipo 'Controller'. Asegúrese de que el controlador tenga un constructor público sin parámetros", "exceptionType": "System.InvalidOperationException", "stackTrace": "en System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) en System.Web.Http.Controllers.Destrol.Tttler. System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext () "," innerException ": {" message ":" Ha ocurrido un error "," exceptionMessage ":" Escriba 'Project.Controller' no tiene un valor predeterminado constructor "," exceptionType ":" System.ArgumentException "," stackTrace ":" en System.Linq.Expressions.Expression.New (Type type) en System.Web.Http.Internal.TypeActivator.Create [TBase] (Type instanceType ) en System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceO rActivator (solicitud HttpRequestMessage, tipo controllerType, Func`1 y activador) en System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (solicitud HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, tipo controllerType) "}}