Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用Ninject 3.2将依赖项注入ASP.NET Web API 2控制器_C#_Asp.net Web Api2_Ninject - Fatal编程技术网

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

C# 无法使用Ninject 3.2将依赖项注入ASP.NET Web API 2控制器,c#,asp.net-web-api2,ninject,C#,Asp.net Web Api2,Ninject,我正在从事一个ASP.NETMVC5项目,我已经使用Ninject 3.2和Moq测试了一段时间正常的控制器。使用最新版本非常简单,以下是我的代码: namespace CianaConsultancy.POC.Abstract { public interface IAuditRepository { IEnumerable<User> Users { get; } } } namespace CianaConsultancy.POC.

我正在从事一个ASP.NETMVC5项目,我已经使用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;
        }
    }
}
namespace-consultancy.POC.Abstract
{
公共接口音频存储
{
IEnumerable用户{get;}
}
} 
命名空间cianaconsultance.POC.Entities
{
公共类用户
{
公共字符串用户标识{get;set;}
}
}
名称空间:aconsultancy.Controllers
{
公共类POCController:控制器
{
私有只读IAuditRepository存储库;
公共财务总监(IAuditResposition auditRepo)
{
this.repository=auditRepo;
}
公共字符串索引()
{
var user=(来自存储库中的u.Users
选择u).FirstOrDefault();
返回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);
}
私有静态无效注册服务(IKernel内核)
{
Mock Mock=新Mock();
Setup(m=>m.Users).Returns(
新名单
{
新用户{
UserId=“185b36c3”
}
}
);
kernel.Bind().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;
        }
    }
}
namespace-consultancy.Controllers
{
公共类动态组控制器:ApiController
{
私有只读IAuditRepository存储库;
公共动态组控制器()
{
}
公共动态组控制器(IAAuditRepository auditRepo)
{
this.repository=auditRepo;
}
公共IEnumerable Get()
{
返回存储库。用户;
}
}
}
它不起作用,Get()方法中的存储库属性为null


我错过了什么?谢谢。

可能是因为您还提供了一个默认(空)构造函数。另外,您是否将WebApi依赖项解析程序连接到Ninject?如果我不将其放在那里,它将给出一个错误。说它需要一个无参数构造函数。你看,我别无选择,这就是重点。Ninject应该为您提供这种依赖关系。看见本质上,您需要这样:
GlobalConfiguration.Configuration.dependencysolver=new ninjectdependencysolver(内核)你是对的,谢谢,不幸的是,我不能将你的话标记为正确的解决方案,因为这是评论。顺便说一句,我还需要安装Ninject.Web.WebAPI包,但该博客中没有提到它。可能是因为您还提供了一个默认(空)构造函数。另外,您是否将WebApi依赖项解析程序连接到Ninject?如果我不将其放在那里,它将给出一个错误。说它需要一个无参数构造函数。你看,我别无选择,这就是重点。Ninject应该为您提供这种依赖关系。看见本质上,您需要这样:
GlobalConfiguration.Configuration.dependencysolver=new ninjectdependencysolver(内核)你是对的,谢谢,不幸的是,我不能将你的话标记为正确的解决方案,因为这是评论。顺便说一句,我还需要安装Ninject.Web.WebAPI包,该博客中没有提到它。