单元测试中的依赖注入,我如何注入我注入的类?

时间:2015-02-11 18:55:22

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

我有一个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
    //...
}

2 个答案:

答案 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());
}