我遇到了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对象,但是我们还没准备好进行那次移动(这对我们来说是一个相当重要的举动)。
有人可以就这可能发生的原因提出一些建议吗?我猜测它与不同跑步者在不同线程上执行测试的方式有关,但我该如何避免呢?
提前致谢
答案 0 :(得分:0)
你的方法似乎很好。
一般来说,测试跑步者不会像你猜测的那样运行多线程或任何魔术。
我建议在你的Reset()中设置一个断点并调试你的测试。
您的代码在静态类中有一个非静态方法,那么还有其他一些您不想提及的内容吗?
当你说“新测试或夹具”时,它是什么?通常你在测试中使用Ninject,最好将内核保留在基类中,并确保在正确的时间重置它以避免任何混淆或怀疑[而不是依赖于对象工厂的“单例”]。