在SpecFlow中进行上下文注入:如何避免出现“ BoDi.ObjectContainerException:无法解析原始类型或结构”?

时间:2019-04-26 09:57:41

标签: c# specflow

使用SpecFlow,我想使用上下文注入在绑定之间共享数据,但是当某些实例无法解析时,我不知道如何避免出现“ BoDi.ObjectContainerException:'无法解析原始类型或结构”异常。

我一直在使用ScenarioContext和FeatureContext在绑定之间共享数据,但是对于SpecFlow 3,这些方法已过时(以下警告消息显示为“ ScenarioContext.Current已过时:请通过Context Injection获得ScenarioContext”)。因此,我开始使用上下文注入。

我正在将对象实例添加到容器中

private readonly IObjectContainer myInstance;

public CommonSteps(IObjectContainer myInstance)
{
   this.myInstance = myInstance;
}

[When(@"I click on the dropdown")]
public void WhenIClickOnTheDropdown(string dropdown)
{       
   MyClass myElement = ...
   myInstance.RegisterInstanceAs(myElement);
}

然后在另一个绑定类中,我得到了该实例:

private readonly MyClass myInstance;

public MetadataConfigurationSteps(MyClass myInstance)
{
    this.myInstance = myInstance;
}

问题是我不需要此绑定类的每个步骤中的myInstance。我有未初始化myInstance的测试,因为不需要它,因此我将收到“ BoDi.ObjectContainerException:'无法解析原始类型或结构”异常。

那么,如何避免这种异常?我是否总是需要将myInstance添加到容器中,即使以后也不需要它?还是应该重构我的MetadataConfigurationSteps类,以便仅包含使用myInstance的步骤?

1 个答案:

答案 0 :(得分:0)

如果没有在每个步骤中使用对象,则将对象添加到容器中没有任何问题。只需让自己保持简单,然后将其添加到[BeforeScenario]钩子中即可。