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

时间:2017-07-09 14:18:50

标签: multithreading unit-testing ninject

上下文

这是一个单元测试场景。

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

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

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

问题

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

在测试的Assert部分,我想访问一个或多个记录器,这些记录器是由被测试类中的线程创建的,并以断言为目的检查记录器。

我该如何完成这项任务? (访问记录器创建的内容)

1 个答案:

答案 0 :(得分:1)

Ninject没有为此提供特定的API,但是,您可以使用&#34; OnActivation&#34;。

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

kernel.Rebind<ILogger>().To<MyLogger>().OnActivation(createdInstance => ...do something...);

替换&#34; ...做点什么......&#34;使用Action<ILogger>将实例添加到(并发安全?)列表或类似名称。

另请参阅Intercept creation of instances in Ninject以获取更多信息。