簡體   English   中英

Ninject與ASP.NET MVC 5控制器和apicontroller

[英]Ninject with asp.net mvc 5 controller and apicontroller

我有asp.net mvc控制器和apicontroller。 我試圖將ninject用於控制器和apicontroller。 Ninject適用於控制器,但不適用於apicontroller。

using System.Web.Mvc;
using MvcAPI_demo.Models;

namespace MvcAPI_demo.Controllers
{
    public class HomeController : Controller
    {
        private readonly IReservationRepository _repository;

        public HomeController(IReservationRepository repository)
        {
            _repository = repository;
        }

        //
        // GET: /Home/
        public ActionResult Index()
        {
            return View(_repository.GetAll());
        }
}


using System.Collections.Generic;
using System.Web.Http;
using MvcAPI_demo.Models;

namespace MvcAPI_demo.Controllers
{
    public class WebApiController : ApiController
    {
        private readonly IReservationRepository _repository;

        public WebApiController()
        {
        }

        public WebApiController(IReservationRepository repository)
        {
            _repository = repository;
        }

        public IEnumerable<Reservation> GetAllReservations()
        {
            return _repository.GetAll();
        }
}





using System;
using System.Collections.Generic;
using System.Web.Mvc;
using MvcAPI_demo.Models;
using Ninject;

namespace MvcAPI_demo.Infrastructure
{
    public class NinjectDependencyResolver : IDependencyResolver
    {
        private readonly IKernel _kernel;

        public NinjectDependencyResolver()
        {
        }

        public NinjectDependencyResolver(IKernel kernel)
        {
            _kernel = kernel;
            AddBinding();
        }

        private void AddBinding()
        {
            _kernel.Bind<IReservationRepository>().To<NonPersistReservationRepository>().InSingletonScope();
        }

        public object GetService(Type serviceType)
        {
            return _kernel.TryGet(serviceType);
        }

        public IEnumerable<object> GetServices(Type serviceType)
        {
            return _kernel.GetAll(serviceType);
        }
    }
}

NinjectWebCommon.cs

private static void RegisterServices(IKernel kernel)
        {
            DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));


        }  

當我嘗試調用/ api / webapi時,它需要一個默認的構造函數,如果我未創建一個默認的構造函數,則創建IReservationRepository的新實例。 常規MVC控制器可以正常工作。 如何使他們一起工作?

Web API有一個不同的Nuget程序包。

看到這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM