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

标签 asp.net-mvc-4 asp.net-web-api ninject ninject.web.mvc

将 Ninject 与 Web API 一起使用时出现此错误,但它适用于 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>();
        }
    }

全局.asax.cs:
BundleConfig.RegisterBundles(BundleTable.Bundles);

            ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

产品 Controller :
   public class ProductController : ApiController
        {
            private IProductRepository repository;

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

            public IEnumerable<Product> GetAllProducts()
            {
                return repository.Products.AsEnumerable();
            }
        }

最佳答案

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

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

  • http://www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api-source/
  • http://www.peterprovost.org/blog/2012/06/19/adding-ninject-to-web-api/
  • 关于asp.net-mvc-4 - 用于 Asp.net Web API 的 Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17760683/

    相关文章:

    c# - NullReferenceException ASP.NET MVC 5

    c# - 从 Index.cshtml 以外的 MVC Razor View 调用时,Ajax 调用失败

    c# - 拒绝访问的页面没有被重定向

    VS2015 中的 Azure 应用服务项目模板和新发布目标

    asp.net-mvc-3 - 将 mvc-mini-profiler 与 EF 4.0 和 Ninject 结合使用

    ninject - 如何确保 NInject2 以正确的顺序处理对象?

    wcf - 使用 WCF 服务的 Ninject Di 绑定(bind)

    asp.net-mvc - 日期选择器编辑器模板

    c# - 为 prod 和 dev 指定 asp.net core 1.0 WebAPI.exe 应该在 program.cs 中使用的 url(端口)

    c# - RoutePrefix 与路由