在.NET Web Api 2.1中,使用Ninject绑定时出现了无参数构造函数错误。

13 浏览
0 Comments

在.NET Web Api 2.1中,使用Ninject绑定时出现了无参数构造函数错误。

目前正在开发一个API网站(.NET Web Api 2.1)

对于我们之前的API网站,我们使用了Ninject.MVC3包,并手动连接了一个依赖解析器和作用域,并按照推荐将我们的逻辑插入到NinjectWebCommon中。

但是在我们的新项目中,这引发了构造函数无参数错误。过去,这是一个明确的提示,说明我们没有正确地连接Web Api中的依赖解析器。但是这一次,我们已经连接了。它在那里。

var resolver = new NinjectDependencyResolver(kernel);
GlobalConfiguration.Configuration.DependencyResolver = resolver;

所以我有点迷失方向。在过去的一周里,我看到Ninject已经更新了,WebAPI nuget包也被重新激活了,所以我决定尝试实现它。

我安装了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;

但是问题仍然存在。

异常信息:

尝试创建类型为'StoreSearchController'的控制器时发生错误。
请确保控制器具有无参数的公共构造函数。

堆栈跟踪:

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.d__0.MoveNext()

内部异常类型:System.ArgumentException

堆栈跟踪:

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依赖解析器的帖子,但是我认为这与我们的情况无关,因为我们没有使用Ninject以外的MVC控制器。

还有一些可能或可能不重要的细节。我们使用属性路由。

感谢任何帮助。

0
0 Comments

在使用Ninject绑定时出现了没有参数的构造函数错误。 解决该问题的方法是安装以下其中一个托管包:

- Ninject.Web.WebApi.WebHost

- Ninject.Web.WebApi.SelfHost

- Ninject.Web.WebApi.OwinHost

感谢Remo的回答,这解决了我的初始问题,但又出现了另一个命名绑定问题,我立即解决了它,现在一切都正常了。谢谢你指出了上述的托管包。

你是如何解决另一个绑定问题的?我也遇到了这个问题。我找到的解决办法是将GlobalConfiguration.Configuration.DependencyResolver从CreateKernel方法中移除,但这又让我回到了之前的问题...

0
0 Comments

在使用Ninject绑定时出现参数为空的构造函数错误。可能的原因是构造函数不是公共的。

0