Multithreading 如何访问Ninject中创建的所有实例?

Multithreading 如何访问Ninject中创建的所有实例?,multithreading,unit-testing,ninject,Multithreading,Unit Testing,Ninject,上下文 这是一个单元测试场景 测试目标类的方法可以从不同的线程并发调用,因此我选择使用线程绑定的单例记录器,而不是用锁保护记录器实现实例本身。被测试的方法总是通过服务定位器模式创建线程绑定的记录器(请不要劫持问题是这是否是反模式) Ninject在测试的安排部分编程如下: kernel.Bind<ILogger>().To<MyLogger>().InThreadScope(); kernel.Bind().To().InThreadScope(); 问题 在测试的

上下文

这是一个单元测试场景

测试目标类的方法可以从不同的线程并发调用,因此我选择使用线程绑定的单例记录器,而不是用锁保护记录器实现实例本身。被测试的方法总是通过服务定位器模式创建线程绑定的记录器(请不要劫持问题是这是否是反模式)

Ninject在测试的安排部分编程如下:

 kernel.Bind<ILogger>().To<MyLogger>().InThreadScope();
kernel.Bind().To().InThreadScope();
问题

在测试的Act部分,一个或多个线程由被测试的实例(内部)创建

在测试的断言部分,我想访问一个或多个由被测试类中的线程创建并使用的记录器,并在断言时检查该记录器


我怎样才能完成这项任务?(访问记录器创建的内容)

Ninject没有为此提供特定的API,但是,您可以使用“
OnActivation

将其添加到现有绑定中,或在单元测试中使用
Rebind
,如下所示:

kernel.Rebind<ILogger>().To<MyLogger>().OnActivation(createdInstance => ...do something...);
kernel.Rebind();
将“…做点什么…”替换为将实例添加到(并发安全?)列表或类似列表的
操作

有关更多信息,请参见