无法使用Ninject 3.2将依赖项注入ASP.NET Web API 2控制器

时间:2016-12-12 09:41:42

标签: c# asp.net-web-api2 ninject

我正在开发一个ASP.NET MVC 5项目,我一直在使用Ninject 3.2和Moq测试普通控制器。使用最新版本非常简单,这是我的代码:

namespace CianaConsultancy.POC.Abstract
{
    public interface IAuditRepository
    {
        IEnumerable<User> Users { get; }
    }
} 


namespace CianaConsultancy.POC.Entities
{
    public class User
    {
        public string UserId { get; set; }
    }
}


namespace CianaConsultancy.Controllers
{
    public class POCController : Controller
    {
        private readonly IAuditRepository repository;
        public POCController(IAuditRepository auditRepo)
        {
            this.repository = auditRepo;
        }

        public string Index()
        {
            var user = (from u in repository.Users
                     select u).FirstOrDefault();
            return user.UserId;
        }
    }
}

在NinjectWebCommon.cs中:

private static void RegisterServices(IKernel kernel)
{
    Mock<IAuditRepository> mock = new Mock<IAuditRepository>();

    mock.Setup(m => m.Users).Returns(
        new List<User>
        {
            new User {
                UserId = "185b36c3"
            }
        }
    );
    kernel.Bind<IAuditRepository>().ToConstant(mock.Object);
}

工作正常。

现在我正在转向Web API控制器,因为我没有找到关于这个主题的任何有用的博客,我只是采用与普通控制器相同的方式:

namespace CianaConsultancy.Controllers
{
    public class DynmQuestionGroupController : ApiController
    {
        private readonly IAuditRepository repository;

        public DynmQuestionGroupController()
        {

        }
        public DynmQuestionGroupController(IAuditRepository auditRepo)
        {
            this.repository = auditRepo;
        }
        public IEnumerable<User> Get()
        {
            return repository.Users;
        }
    }
}

它不起作用,在Get()方法中,repository属性为null。

我想念什么?感谢。

0 个答案:

没有答案