2

新手忍者问题 klaxxon。

我有以下类和接口,它们描述了我需要注入的依赖项,以及需要注入依赖项的具体实例的依赖项。

public interface IDependency { }

public class FooDependency : IDependency { }

public class Depender
{
    [Inject]
    public IDependency Dependency { get; set; }

    public bool DependencyIsNull()
    {
        return Dependency == null;
    }
}

我已经使用 NinjectModule 实例设置了我的绑定,就像这样。

public class Bindings : NinjectModule
{
    public override void Load()
    {
        Bind<IDependency>().To<FooDependency>();
    }
}

这是一个单元测试方法,它断言依赖项已被注入到依赖项中。

[TestMethod]
public void TestMethod1()
{
   var kernel = new StandardKernel(new Bindings());
   var bar = new Depender();
   Assert.IsFalse(bar.DependencyIsNull());
}

我显然在做一些根本错误的事情,因为我本以为测试会通过,但事实并非如此。

4

1 回答 1

3

您的对象不是由您的kernel. 一切都需要由kernel注入依赖项创建:

// option a (recommended)
var kernel = new StandardKernel(new Bindings());
var bar = kernel.Get<IDependency>();
Assert.IsFalse(bar.DependencyIsNull());

// option b (not recommended.. but do-able)
var kernel = new StandardKernel(new Bindings());
var bar = new Depender();
kernel.Inject(bar); // injects after the fact
Assert.IsFalse(bar.DependencyIsNull());

DependencyIsNull此外,您的界面中应该有该方法:

public interface IDependency {
    bool DependencyIsNull();
}
于 2013-08-23T14:00:46.647 回答