Asp.net mvc 4 用于Asp.net Web API的Ninject
我在将Ninject与Web API一起使用时遇到此错误,但它与MVC控制器一起工作: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
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,可以查看以下指南:
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