C# .NET Web Api 2.1中具有Ninject绑定的无参数构造函数错误

C# .NET Web Api 2.1中具有Ninject绑定的无参数构造函数错误,c#,.net,asp.net-web-api,ninject,C#,.net,Asp.net Web Api,Ninject,目前正在编写API站点(.NET Web API 2.1) 对于我们以前的API站点,我们使用了Ninject.MVC3包,手动连接了依赖项解析程序和作用域,并根据建议将我们的逻辑插入到NinjectWebCommon中 这在我们的新项目中引起了令人心痛的无参数构造函数错误。在过去,我们没有在WebAPI中正确连接依赖解析程序,这是一个致命的漏洞。只是这一次,我们是。它就在那里 var resolver = new NinjectDependencyResolver(kernel); Globa

目前正在编写API站点(.NET Web API 2.1)

对于我们以前的API站点,我们使用了Ninject.MVC3包,手动连接了依赖项解析程序和作用域,并根据建议将我们的逻辑插入到NinjectWebCommon中

这在我们的新项目中引起了令人心痛的无参数构造函数错误。在过去,我们没有在WebAPI中正确连接依赖解析程序,这是一个致命的漏洞。只是这一次,我们是。它就在那里

var resolver = new NinjectDependencyResolver(kernel);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
所以我有点迷路了。在上周,我看到Ninject被更新,WebAPI nuget包被恢复,所以我决定尝试并实现它

我安装了NuGet包Ninject.Web.WebApi(版本3.2)。这似乎不包括应用绑定的NinectWebCommon.cs文件。它只添加了必要的程序集。在进行一些挖掘时,我偶然发现了这个实现

(我不清楚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;
但问题依然存在

例外消息:

An error occurred when trying to create a controller of type 'StoreSearchController'.
Make sure that the controller has a parameterless public constructor.
堆栈跟踪:

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()
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

另一个可能重要也可能不重要的花边新闻。我们正在使用属性路由


非常感谢您的帮助。

您必须安装一个托管软件包:

  • Ninject.Web.WebApi.WebHost
  • Ninject.Web.WebApi.SelfHost
  • Ninject.Web.WebApi.OwinHost

此外,请仔细检查您的构造函数是否是公共的。这很容易被忽视。

谢谢雷莫。这解决了我最初的问题,揭示了另一个命名为约束的问题,我很快解决了,现在世界上一切都很好。谢谢您指出上面的包。@Khepri您是如何解决其他绑定问题的?我也明白了。我发现将
GlobalConfiguration.Configuration.DependencyResolver
分配从CreateKernel中删除,但这又让我回到了这个问题。。。