C# 无法使用Ninject 3.2将依赖项注入ASP.NET Web API 2控制器
我正在从事一个ASP.NETMVC5项目,我已经使用Ninject 3.2和Moq测试了一段时间正常的控制器。使用最新版本非常简单,以下是我的代码: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.
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包,该博客中没有提到它。