Unity IoC не внедряет зависимости в Web API Controller
Я очень плохо знаком с использованием Unity, но моя проблема в том, что всякий раз, когда я вызываю свой веб-сервис, я получаю исключение, в котором говорится, что
«Убедитесь, что у контроллера есть открытый конструктор без параметров»
Я следовал за несколькими уроками, и я все еще получаю ту же проблему.
В функции Register моего класса WebApiConfig я имею
var container = new UnityContainer();
container.RegisterType<IValidator, Validator>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
Вот мой класс 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();
}
}
Я не зарегистрировал никаких контроллеров, так как в каждом уроке утверждается, что мне это не нужно. Вот мой фактический контроллер
public class Controller: ApiController
{
private IValidator _validator;
public Controller(IValidator validator)
{
this._validator = validator;
}
[HttpPost]
public void ReceiveIPN()
{
}
}
У кого-нибудь есть идеи относительно того, что я могу делать неправильно? Спасибо!
РЕДАКТИРОВАТЬ 1: Вот «реализация» класса Validator. Это довольно пусто, потому что я не хотел вводить ошибку здесь, пока я не решил проблему 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();
}
}
РЕДАКТИРОВАТЬ 2: Вот полный ответ об ошибке, которую я получаю, когда пытаюсь вызвать маршрут веб-API с помощью Fiddler
{"message": "Произошла ошибка.", "exceptionMessage": "Произошла ошибка при попытке создать контроллер типа 'Controller'. Убедитесь, что у контроллера есть открытый конструктор без параметров.", "exceptionType": «System.InvalidOperationException», «stackTrace»: «at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (запрос HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, тип controllerType) в классе System.Web.Http System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext () "," innerException ": {" message ":" Произошла ошибка. "," ExceptionMessage ":" Тип "Project.Controller" не имеет значения по умолчанию конструктор "," exceptionType ":" System.ArgumentException "," stackTrace ":" в System.Linq.Expressions.Expression.New (тип type) в System.Web.Http.Internal.TypeActivator.Create [TBase] (тип instanceType ) в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceO rActivator (запрос HttpRequestMessage, Type controllerType, Func`1 & activator) в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (запрос HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Тип controller} Тип)