Вы можете использовать ScenarioContext
и передать его. Хорошая вещь в этом подходе заключается в том, что вам не нужно регистрировать что-то новое в контейнере объекта.
Чтобы создать «текущий заказ» в OrderSteps:
[Binding]
public class OrderSteps
{
private readonly NgWebDriver driver;
private readonly ScenarioContext scenario;
private OrderInfo CurrentOrder
{
get => (OrderInfo)scenario["OrderInfo"];
set => scenario["OrderInfo"] = value;
}
public OrderSteps(NgWebDriver driver, ScenarioContext scenario)
{
this.driver = driver;
this.scenario = scenario;
}
[When(@"I am creating new order")]
public void WhenIAmCreatingNewOrder(Table table)
{
var orderListPage = new OrdersListPage(driver);
CurrentOrder = orderListPage.CreateNewOrder(table.CreateInstance<OrderInfo>());;
}
}
Затем использовать Объект OrderInfo в другом классе:
[Binding]
public class BuyerPortalSteps
{
private readonly NgWebDriver driver;
private readonly ScenarioContext scenario;
private OrderInfo CurrentOrder => (OrderInfo)scenario["OrderInfo"];
public BuyerPortalSteps(NgWebDriver driver, ScenarioContext scenario)
{
this.driver = driver;
this.scenario = scenario;
}
[Then(@"I am looking for order on buyer statistics grid")]
public void ThenIAmLookingForOrderOnBuyerStatisticsGrid()
{
var buyerPortalDashboard = new BuyerPortalDashboard(driver);
buyerPortalDashboard.CheckBuyerDashboardStatistic(CurrentOrder);
}
}
Я также создал методы расширения для ScenarioContext, что также может быть удобно:
namespace YourProject.Tests
{
public static class OrderScenarioContextExtensions
{
public static OrderInfo GetCurrentOrder(this ScenarioContext scenario)
{
return (OrderInfo)scenario["OrderInfo"];
}
public static void SetCurrentOrder(this ScenarioContext scenario, OrderInfo currentOrder)
{
scenario["OrderInfo"] = currentOrder;
}
}
}
Затем вы можете вызывать эти методы расширения везде, где вам нужно иметь ScenarioContext
объект:
var order = scenario.GetCurrentOrder();
var order = new OrderInfo();
scenario.SetCurrentOrder(order);
Дополнительная информация: Внедрение в контекст сценария (документы SpecFlow)