在Asp.Net Web API 2中将Ninject与继承ApiController和Controller的控制器一起使用

时间:2019-03-22 16:35:28

标签: asp.net-mvc-5 asp.net-web-api2 ninject

我在MVC 5 Web应用程序和Web API 2 API中都使用Ninject进行依赖项注入。在我的Web API中,最近我需要返回一个View,因此我创建了一个继承Controller的ManageController。然后,我需要使用ManageController方法之一访问服务。尝试使用服务时,我一直遇到错误,并且服务断点永远不会被击中。经过调查,我发现Ninject很可能没有为Controller配置(我收到了无参数构造函数错误)。据我所知,我没有在Web API项目中安装Ninject.MVC5和Ninject.Web.Common.WebHost。无论如何,由于我只需要以一种方法访问1 Service,所以我决定寻找一种解决方法,而不是再安装两个软件包,并且可能不得不解决一些错误。这是我想出的。有人看到我的解决方法有任何问题吗?

这是NinjectWebCommon中RegisterServices的外观。这会将服务注入到完美继承ApiController的控制器中。

private static void RegisterServices(IKernel kernel)
{
  kernel.Load(typeof(DataLayerModule).Assembly);
  kernel.Load(typeof(ServiceLayerModule).Assembly);
  kernel.Load(typeof(ApiModule).Assembly);
  ApiModule.Kernel = kernel;
}   

这是我给服务打电话的方式。

private IMyService _myService; 

public ManageController()
{
  _myService = ApiModule.Kernel.Get<IMyService>();
}  

我没有创建内核的新实例。

我现在能够像这样访问服务。

await _myService.GetSomething(id);

有人看到这个有什么问题吗?我应该继续安装Ninject.MVC5和Ninject.Web.Common.WebHost并将服务注入ManageController吗?

非常感谢您的帮助!谢谢!

0 个答案:

没有答案