C# 带有asp.net mvc 5控制器和apicontroller的Ninject
我有asp.NETMVC控制器和apicontroller。我试图将ninject用于控制器和ApicController。ninject适用于controller,但不适用于ApicControllerC# 带有asp.net mvc 5控制器和apicontroller的Ninject,c#,asp.net-mvc,asp.net-web-api,ninject,ninject.web.mvc,C#,Asp.net Mvc,Asp.net Web Api,Ninject,Ninject.web.mvc,我有asp.NETMVC控制器和apicontroller。我试图将ninject用于控制器和ApicController。ninject适用于controller,但不适用于ApicController using System.Web.Mvc; using MvcAPI_demo.Models; namespace MvcAPI_demo.Controllers { public class HomeController : Controller { pri
using System.Web.Mvc;
using MvcAPI_demo.Models;
namespace MvcAPI_demo.Controllers
{
public class HomeController : Controller
{
private readonly IReservationRepository _repository;
public HomeController(IReservationRepository repository)
{
_repository = repository;
}
//
// GET: /Home/
public ActionResult Index()
{
return View(_repository.GetAll());
}
}
using System.Collections.Generic;
using System.Web.Http;
using MvcAPI_demo.Models;
namespace MvcAPI_demo.Controllers
{
public class WebApiController : ApiController
{
private readonly IReservationRepository _repository;
public WebApiController()
{
}
public WebApiController(IReservationRepository repository)
{
_repository = repository;
}
public IEnumerable<Reservation> GetAllReservations()
{
return _repository.GetAll();
}
}
using System;
using System.Collections.Generic;
using System.Web.Mvc;
using MvcAPI_demo.Models;
using Ninject;
namespace MvcAPI_demo.Infrastructure
{
public class NinjectDependencyResolver : IDependencyResolver
{
private readonly IKernel _kernel;
public NinjectDependencyResolver()
{
}
public NinjectDependencyResolver(IKernel kernel)
{
_kernel = kernel;
AddBinding();
}
private void AddBinding()
{
_kernel.Bind<IReservationRepository>().To<NonPersistReservationRepository>().InSingletonScope();
}
public object GetService(Type serviceType)
{
return _kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _kernel.GetAll(serviceType);
}
}
}
当我尝试调用/api/webapi is时,需要一个默认构造函数,如果我没有创建默认构造函数,则需要创建IReservationRepository的新实例。常规MVC控制器工作正常。如何使它们协同工作?web API有一个不同的Nuget包
请参见UPD解决此问题的方法是使用nuget软件包Ninject.MVC5而不是MVC3,而使用WebAPI时,我使用的nuget软件包Ninject.Web.WebAPI版本3.2.1和新版本3.4.0不起作用。并且绑定被包括到RegisterServices私有静态无效RegisterServicesIKernel内核{kernel.Bind.to.InSingletonScope;}谢谢,这很有帮助。为了解决这个问题,我不得不使用Ninject.Web.WebApi版本3.2.1,默认安装为3.2.4
private static void RegisterServices(IKernel kernel)
{
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}