Я использую внедрение контекста в SpecFlow, но я столкнулся с проблемой, из-за которой я хочу поделиться классом привязок шага, но мне не обязательно регистрировать все параметры конструктора.
У меня естьразличные перехватчики BeforeScenario в отдельном классе привязки / перехвата, где я регистрирую объекты в контейнере, как показано ниже ....
[Scope(Scenario = "Scenario A")]
[BeforeScenario(Order = 5)]
public void CreateApprenticeWithChecklist()
{
//Other stuff
_container.RegisterInstanceAs<Apprentice>(apprentice);
}
[Scope(Scenario = "Scenario B")]
[BeforeScenario(Order = 5)]
public void CreateApprenticeWithChecklistAllSignOff()
{
//Other stuff
_container.RegisterInstanceAs<Apprentice>(apprentice);
_container.RegisterInstanceAs<Dictionary<string, UserDetails>>(new Dictionary<string, UserDetails>
{
["Employer"] = employer.Key,
["Training Provider"] = trainingProvider.Key
});
}
Затем у меня есть класс определений шагов, который будет использоваться обоими этими сценариями ....
[Binding]
public sealed class ApprenticeChecklistSteps
{
private Apprentice _apprentice;
private UserDetails _employer;
private UserDetails _trainingProvider;
public ApprenticeChecklistSteps(Apprentice apprentice, Dictionary<string, UserDetails> userDetails)
{
_apprentice = apprentice;
_employer = userDetails["Employer"];
_trainingProvider = userDetails["Training Provider"];
}
//etc
Проблема в том, что если я запускаю Scenario A
, для Dictionary<string, UserDetails> userDetails
не будет регистрации, и я получу ошибку Multiple public constructors with same maximum parameter count are not supported!
.
Как я могу поделитьсяпошаговые привязки между сценариями, если у меня не обязательно есть или нужен определенный параметр конструктора?
Единственные решения, которые я вижу, - это хаки
Создание «пустых» регистраций для всех неиспользуемых конструкторовпараметры, чтобы они инициализировались
Или ...
Создайте отдельный POCO, который содержит все возможные регистрации, и зарегистрируйте все, что мне нужно, тогдаn Мне это нужно
public class CheckListContext
{
public Apprentice Apprentice { get; set; }
public Dictionary<string, UserDetails> UserDetails { get; set; }
}
Регистрация в Сценарии A BeforeScenario
Шаг тогда станет ...
_container.RegisterInstanceAs<CheckListContext>(new CheckListContext{Apprentice = apprentice});