5

Web API で Ninject を使用すると、このエラーが発生しましたが、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>();
        }
    }

Global.asax.cs :

BundleConfig.RegisterBundles(BundleTable.Bundles);

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

製品コントローラ:

   public class ProductController : ApiController
        {
            private IProductRepository repository;

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

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

3 に答える 3

3

をオーバーライドしましたDefaultControllerFactory。ただし、これは ASP.NET MVC コントローラー (から派生したものSystem.Web.Mvc.Controller) をインスタンス化するために使用されます。ASP.NET Web API コントローラー (から派生したものSystem.Web.Http.ApiController) とはまったく関係ありません。

したがって、基本的にここで行ったことは、ASP.NET MVC への依存関係の挿入です。これを Web API に使用する場合は、次のガイドを参照してください。

于 2013-07-20T09:54:37.347 に答える