在Ninject v1中重置IKernel

时间:2009-10-20 14:53:09

标签: dependency-injection ioc-container ninject

我遇到了Ninject的v1问题并重置了StandardKernel。我有一个静态对象,用于提供对内核的访问,如此

public static class ObjectFactory
{
    private static IKernel _kernel =  new StandardKernel(new CanceisModule());

    // Resolve methods snipped for brevity

    public static void Reset()
    {
        _kernel = null;
        _kernel = new StandardKernel(new CanceisModule());
    }
}

当我尝试在各种单元测试(我使用MSTest)或fitnesse灯具中使用ObjectFactory时出现问题。我总是在每个新的测试或装置之前调用ObjectFactory.Reset()方法,但有时似乎重置实际上不起作用并保留原始绑定。我知道有一种方法可以在Ninject的v2中重置IKernel对象,但是我们还没准备好进行那次移动(这对我们来说是一个相当重要的举动)。

有人可以就这可能发生的原因提出一些建议吗?我猜测它与不同跑步者在不同线程上执行测试的方式有关,但我该如何避免呢?

提前致谢

1 个答案:

答案 0 :(得分:0)

你的方法似乎很好。

一般来说,测试跑步者不会像你猜测的那样运行多线程或任何魔术。

我建议在你的Reset()中设置一个断点并调试你的测试。

您的代码在静态类中有一个非静态方法,那么还有其他一些您不想提及的内容吗?

当你说“新测试或夹具”时,它是什么?通常你在测试中使用Ninject,最好将内核保留在基类中,并确保在正确的时间重置它以避免任何混淆或怀疑[而不是依赖于对象工厂的“单例”]。