Работа в настоящее время по написанию сайта API (.NET Web Api 2.1)
Для наших предыдущих сайтов API мы использовали пакет Ninject.MVC3 и вручную подключили преобразователь и область зависимостей и подключили нашу логику к NinjectWebCommon в соответствии с рекомендацией.
Это вызвало изжогу в нашем новом проекте с ошибкой конструктора без параметров. Раньше это было мертвым, что мы не собирались правильно подключать преобразователь зависимостей в Web Api. Только на этот раз мы были. Он был там.
var resolver = new NinjectDependencyResolver(kernel);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
Так что я был немного потерян. На прошлой неделе я увидел, что Ninject был обновлен, пакет nuget WebAPI был восстановлен, поэтому я решил попробовать и реализовать.
Я установил пакет NuGet Ninject.Web.WebApi(версия 3.2). По-видимому, это не включает файл NinectWebCommon.cs для применения привязок. Он только добавил необходимые сборки. Выполняя некоторые копания, я наткнулся на эту реализацию.
https://gist.github.com/odytrice/5842010
(Я не был уверен, что пакет Nuget делает это для меня, и это все избыточный код. Если это так, мне просто нужно понять, как добавить наши привязки с пакетом nuget.)
Я реализовал эту строку для строки, за исключением случаев, когда загружаю модули, я загрузил три наших отдельных модуля в качестве теста.
public static INinjectModule[] Modules
{
//get { return new INinjectModule[] { new MainModule() }; }
get { return new INinjectModule[] { new GlobalModule(), new InventoryModule(), new StoreModule() }; }
}
Я проверил, что с этим новым кодом устанавливается этот преобразователь зависимости.
_resolver = new NinjectHttpResolver(modules);
GlobalConfiguration.Configuration.DependencyResolver = _resolver;
Но все же проблема сохраняется.
ExceptionMessage:
An error occurred when trying to create a controller of type 'StoreSearchController'.
Make sure that the controller has a parameterless public constructor.
StackTrace:
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()
Внутренний исключение Тип исключения: System.ArgumentException
StackTrace:
at System.Linq.Expressions.Expression.New(Type type)
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
Я в недоумении. Я видел много сообщений о необходимости устанавливать MVC-зависимый преобразователь, но не думал, что это связано, поскольку в этом случае у нас нет контроллеров MVC вне домашнего контроллера, который не использует Ninject.
Еще один лакомый кусочек, который может или не имеет значения. Мы используем маршрутизацию атрибутов.
Любая помощь приветствуется.