Ninject Moqing Kernel(重置做什么?)

时间:2013-09-01 18:07:47

标签: ninject moq

我有一个界面,我正在使用几个不同的具体类。我希望有这样的东西......

_kernel.GetMock<ISerializeToFile>().Named("MyRegisteredName")
    .Setup(x => x.Read<ObservableCollection<PointCtTestDataInput>>(
        It.IsAny<string>()));

我正在开发的项目使用服务定位器模式 - 反模式,我一直不太喜欢...

最初我试过..

[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
    _kernel = new MoqMockingKernel();
}

[TestInitialize]
public void TestInitialize()
{
    _kernel.Reset();
    ServiceLocator.SetLocatorProvider(
        () => new NinjectServiceLocator(_kernel));
    _kernel.Bind<ISerializeToFile>().ToMock()
        .InSingletonScope().Named("ObjectToFile");
    _kernel.GetMock<ISerializeToFile>()
        .Setup(x => x.Read<ObservableCollection<PointCtTestDataInput>>(
            It.IsAny<string>()));
    _kernel.GetMock<ISerializeToFile>()
        .Setup(x => x.Save<ObservableCollection<PointCtTestDataInput>>(
            It.IsAny<ObservableCollection<PointCtTestDataInput>>(), 
            It.IsAny<string>()));
}

我收到了标准的Ninject错误,说明有多个匹配的绑定可用。所以,我将_kernel = new MoqMockingKernel();移到了TestInitialize中,然后该错误就消失了......也许我错误地猜测_kernel.Reset()会做什么?

1 个答案:

答案 0 :(得分:4)

重置会从缓存中删除所有实例。它不会删除现有绑定。所以第二次测试将ISerializeToFile两次。