.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() }; } }
我已经validation了使用这个新代码设置了依赖项解析器。
_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.
堆栈跟踪:
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()
内部exceptionexception类型: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依赖解析器的post,但是没想到这是相关的,因为在这种情况下我们在家庭控制器之外没有使用Ninject的MVC控制器。
另一个可能或可能不重要的花絮。 我们正在使用属性路由。
任何帮助表示赞赏。
您必须安装其中一个主机软件包:
- Ninject.Web.WebApi.WebHost
- Ninject.Web.WebApi.SelfHost
- Ninject.Web.WebApi.OwinHost
另外,仔细检查您的构造函数是否为Public。 这很容易被忽视。