I got this error when using Ninject with a web API, but it works with an MVC controller:
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>(); } }
Global.asax.cs:
BundleConfig.RegisterBundles(BundleTable.Bundles); ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
ProductController:
public class ProductController : ApiController { private IProductRepository repository; public ProductController(IProductRepository ProducteRepository) { this.repository = ProductRepository; } public IEnumerable<Product> GetAllProducts() { return repository.Products.AsEnumerable(); } }
source share