Asp.net mvc 4 用于Asp.net Web API的Ninject

Asp.net mvc 4 用于Asp.net Web API的Ninject,asp.net-mvc-4,asp.net-web-api,ninject,ninject.web.mvc,Asp.net Mvc 4,Asp.net Web Api,Ninject,Ninject.web.mvc,我在将Ninject与Web API一起使用时遇到此错误,但它与MVC控制器一起工作: Type 'App.Web.Controllers.ProductController' does not have a default constructor NinjectControllerFactory: public class NinjectControllerFactory : DefaultControllerFactory { private IKernel nin

我在将Ninject与Web API一起使用时遇到此错误,但它与MVC控制器一起工作:

Type 'App.Web.Controllers.ProductController' does not have a default constructor
NinjectControllerFactory:

public class NinjectControllerFactory : DefaultControllerFactory
    {
        private IKernel ninjectKernel;

        public NinjectControllerFactory()
        {
            ninjectKernel = new StandardKernel();
            AddBindings();
        }

        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
        }

        public void AddBindings()
        {
            ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>();
        }
    }
产品控制器:

   public class ProductController : ApiController
        {
            private IProductRepository repository;

            public ProductController(IProductRepository ProducteRepository)
            {
                this.repository = ProductRepository;
            }

            public IEnumerable<Product> GetAllProducts()
            {
                return repository.Products.AsEnumerable();
            }
        }
公共类ProductController:ApicController
{
私有知识产权知识库;
公共产品控制器(IPProductRepository ProducteRepository)
{
this.repository=ProductRepository;
}
公共IEnumerable GetAllProducts()
{
返回repository.Products.AsEnumerable();
}
}

您已经覆盖了
DefaultControllerFactory
。但这用于实例化ASP.NET MVC控制器(一个从
System.Web.MVC.Controller
派生的控制器)。它与ASP.NET Web API控制器(源自
System.Web.Http.ApiController
)完全无关

因此,基本上您在这里所做的是将依赖项注入到ASP.NET MVC中。如果您想将其用于Web API,可以查看以下指南:


您应该使用最新的Ninject Web API包,它已经解决了这些问题。请参见此处:

您需要设置
HttpConfiguration
dependencysolver
属性。您所做的是针对ASP.NETMVC,而不是ASP.NETWebAPI

因此,获取NuGet包并设置DependencyResolver:

var kernel = new StandardKernel();
// use kernel to register your dependencies
var dependencyResolver = new NInjectResolver(kernel);
config.DependencyResolver = dependencyResolver; // config is an instance of HttpConfiguration based on your hosting scenario
var kernel = new StandardKernel();
// use kernel to register your dependencies
var dependencyResolver = new NInjectResolver(kernel);
config.DependencyResolver = dependencyResolver; // config is an instance of HttpConfiguration based on your hosting scenario