我有一个Web API项目,我绑定到我的所有类。
//NinjectWebCommon.cs
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<DAL.IDAL>().To<DAL.MyDAL>();
kernel.Bind<BUS.IService>().To<BUS.MyService>();
kernel.Bind<DAL.IUser>().To<API.User>().InSingletonScope();
}
这很好用。
我尝试使用以下内容为我的DAL设置单元测试。
//Test1.cs
public DAL.IDAL db { private get; set; }
[TestInitialize]
public void InitializeTests()
{
var kernel = new Ninject.StandardKernel();
db = kernel.Get<DAL.MyDAL>();
kernel.Bind<DAL.IUser>().To<Test.User>().InSingletonScope();;
}
我收到错误
激活IUser时出错 没有匹配的绑定可用且类型不可自我绑定 激活路径:
2)将依赖IUser注入到MyDAL类型的属性用户中 1)申请MyDAL
我在MyDAL课程中有IUser。我不确定这里到底发生了什么。
//MyDAL.cs
public class MyDAL
{
[Inject]
public IUser user { get; set; }
//other functions
//...
}
答案 0 :(得分:1)
“翻转”这两行。
db = kernel.Get<DAL.MyDAL>();
kernel.Bind<DAL.IUser>().To<Test.User>().InSingletonScope();
又名:
kernel.Bind<DAL.IUser>().To<Test.User>().InSingletonScope();
db = kernel.Get<DAL.MyDAL>();
在调用之前,你必须“定义”事物。
答案 1 :(得分:0)
好的,我明白了。感谢Cheat Sheet
基本上我需要特意将我的价值注入我的班级。
public DAL.IDAL db { private get; set; }
[TestInitialize]
public void InitializeTests()
{
var kernel = new Ninject.StandardKernel();
db = kernel.Get<DAL.MyDAL>(new PropertyValue("user", new Test.User());
}