0

我在使用 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)或健身装置中使用 ObjectFactory 时,问题就出现了。我总是在每个新的测试或夹具之前调用 ObjectFactory.Reset() 方法,但有时看起来重置实际上并没有工作,而是保留了原始绑定。我知道有一种方法可以在 Ninject v2 中重置 IKernel 对象,但我们还没有准备好采取行动(这对我们来说是一个相当重要的举措)。

有人可以就为什么会发生这种情况提供一些建议吗?我猜这与在不同跑步者的不同线程上执行测试的方式有关,但我该如何避免呢?

提前致谢

4

1 回答 1

0

你的方法似乎很好。

一般来说,测试运行程序不会运行多线程或任何你猜想的魔法。

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

您的代码在静态类中有一个非静态方法,那么您还有什么要提及的吗?

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

于 2009-10-20T18:39:42.663 回答