Я разрабатываю веб-службу ASP.NET Web Api 2.2 с .NET Framework 4.6.2.Контроллер Api не имеет предопределенного конструктора
Да, есть много вопросов, подобных моим, но и я сделал это все, что они предлагают в своих ответах и у меня есть следующее сообщение об ошибке:
{
"Message": "Error.",
"ExceptionMessage": "Error trying to create a controller of type 'PrintedCodesStatisticsController'. Ensure that the controller has a public constructor without parameters.",
"ExceptionType": "System.InvalidOperationException",
"StackTrace": " en System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)\r\n en System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)\r\n en System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()",
"InnerException": {
"Message": "Error.",
"ExceptionMessage": "Type 'MyProject.WebApi.Controllers.PrintedCodesStatisticsController' doesn't have a predefined constructor",
"ExceptionType": "System.ArgumentException",
"StackTrace": " en System.Linq.Expressions.Expression.New(Type type)\r\n en System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n en System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)\r\n en System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)"
}
}
пакеты, которые я использую в моем проекте являются:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net462" />
<package id="log4net" version="2.0.5" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Client.es" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Core.es" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.WebHost.es" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net462" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
<package id="Ninject" version="3.2.2.0" targetFramework="net462" />
<package id="Ninject.MVC5" version="3.2.1.0" targetFramework="net462" />
<package id="Ninject.Web.Common" version="3.2.3.0" targetFramework="net462" />
<package id="Ninject.Web.Common.WebHost" version="3.2.3.0" targetFramework="net462" />
<package id="WebActivatorEx" version="2.2.0" targetFramework="net462" />
</packages>
и я уверен, что я использую NinjectDependenciaResolver
потому что я отлажена его, и он останавливается на нем устанавливается GlobalConfiguration.Configuration.DependencyResolver
.
NinjectDependencyResolver
является:
using Ninject;
using System.Web.Http.Dependencies;
namespace AnotherProject.Web.Common.Ninject
{
/// <summary>
/// Used to resolve dependencies.
/// </summary>
public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver
{
public NinjectDependencyResolver(IKernel kernel)
: base(kernel)
{ }
public IDependencyScope BeginScope()
{
return this;
}
}
}
И NinjectDependencyScope
является:
public class NinjectDependencyScope : IDependencyScope
{
private readonly IKernel _container;
public IKernel Container
{
get { return _container; }
}
public NinjectDependencyScope(IKernel container)
{
_container = container;
}
public object GetService(Type serviceType)
{
return _container.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _container.GetAll(serviceType);
}
public void Dispose()
{
// noop
}
}
И, наконец, NinjectConfigurator
является:
public class NinjectConfigurator
{
/// <summary>
/// Entry method used by caller to configure the given
/// container with all of this application's
/// dependencies. Also configures the container as this
/// application's dependency resolver.
/// </summary>
public void Configure(IKernel container)
{
// Add all bindings/dependencies
AddBindings(container);
// Use the container and our NinjectDependencyResolver as
// application's resolver
var resolver = new NinjectDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
}
/// <summary>
/// Add all bindings/dependencies to the container
/// </summary>
private void AddBindings(IKernel container)
{
[ ... ]
}
}
Как я могу решить эту ошибку?
Это сообщение об ошибке типична, если где-то ваш интерфейс не унаследовал от своего класса ...Было бы хорошо, если бы вы показали код, в котором вы связываете свои кланы с интерфейсами, - может быть источником ошибки – Vladimir
Каковы зависимости для PrintedCodesStatisticsController? Можете ли вы предоставить эти детали? Как выглядит конструктор для PrintedCodesStatisticsController? – Vinod
Спасибо, но проблема в том, что я вводил интерфейс, который он не был определен в классе «NinjectConfigurator». – VansFannel