SpecFlow:当NInject用作IoC时如何注入ScenarioContext

时间:2016-05-30 11:01:45

标签: c# nunit ninject specflow ncrunch

将我们的解决方案从SpecFlow1.9更新到2.0并将NUnit2.6.4更新到3.2.1后,当使用NCrunch执行SpecFlow测试时,我们得到一个SpecFlowException

TechTalk.SpecFlow.SpecFlowException : The ScenarioContext.Current static accessor cannot
 be used in multi-threaded execution. Try injecting the scenario context to the binding
 class. See http://go.specflow.org/doc-multithreaded for details.
 at TechTalk.SpecFlow.ScenarioContext.get_Current()

异常文本中链接http://go.specflow.org/doc-multithreaded的解决方案建议仅在使用SpecFlow的内置mini IoC时才有效。但是,我们在SpecFlow测试中使用NInject作为IoC。只需在类中包装静态字段ScenarionContext.Current并在单例上下文中注册该类,当然只是将问题移到另一个地方。

当使用NInject而不是SpecFlow的内置IoC时,有人知道如何注入ScenarionContext吗?

1 个答案:

答案 0 :(得分:1)

SpecFlow现在通过插件为每个容器支持其他容器。注入SpecFlows容器时只能使用一个容器。因此,如果您使用Ninject插件,则只能使用Ninject插件。

不幸的是,创建Ninject插件的开发人员没有将其发布到NuGet,因此您必须自己构建。

https://github.com/MattMcKinney/SpecFlow.Ninject

您可能想问一下他的插件正在使用哪个许可证。