Внедрение зависимостей с помощью Autofact для Specflow

Я хочу реализовать DI для Specflow, поэтому я установил Specflow.Autofac после успешной установки и запустил Specflow самостоятельно. Сразу после установки Specflow.Autofac все идет не так, и я получаю эту ошибку для запуска или отладки теста:

Could not load type TechTalk.SpecFlow.Infrastructure.IBindingInstanceResolver

Я не получил надлежащего результата моих поисков по этой проблеме. Я признателен за любую помощь в этой проблеме или пошаговую процедуру реализации внедрения зависимостей для Specflow

Заранее спасибо


person Mehdi    schedule 21.02.2018    source источник


Ответы (2)


Я пытался реализовать DI для Specflow с помощью собственного контейнера IoC. Specflow имеет встроенный контейнер IoC, который называется ObjectContainer. Его можно реализовать следующим образом, чтобы включить DI для Specflow:

[Binding]
public class TestDependecies
{
    [BeforeScenario]
    public void SetupContainer()
    {
        var objectContainer = (IObjectContainer)ScenarioContext.Current.GetBindingInstance(typeof(BoDi.IObjectContainer));

        var wiringContainer = new WiringContainerWrapper(objectContainer);

        TestConfigurator.Configure(wiringContainer);
    }
}

После оценки настройки контейнера путем подключения к BeforScenario атрибутам внедрение может быть выполнено путем внедрения конструктора для классов шагов.

[Binding]
public class PromotionsSteps
{
    private readonly IItemFacade itemFacade;
    private readonly IPromotionFacade promotionFacade;

    public PromotionsSteps(IItemFacade itemFacade,
        IPromotionFacade promotionFacade)
    {
        this.itemFacade = itemFacade;
        this.promotionFacade = promotionFacade;
    }

    [Given(@"I have a stepBase with name '(.*)' promotion with following values :")]
    public void GivenIHaveAStepBaseWithNamePromotionWithFollowingValues(string p0, Table table)
    {
        ScenarioContext.Current.Pending();
    }

    .
    .
    .
}
person Mehdi    schedule 22.02.2018
comment
Если вы решили свою проблему, примите этот ответ, в противном случае включите этот код в свой вопрос. Кстати, вам нужно только начинать предложения с большой буквы, без обид ;). - person codemonkeh; 22.02.2018
comment
@codemonkeh спасибо за внимание, но я не могу принять свой ответ через 23 часа - person Mehdi; 22.02.2018

Возможно, вам потребуется обновить SpecFlow.Autofac до версии, которая поддерживает используемую вами версию SpecFlow. SpecFlow.Autofac не выпускается командой SpecFlow.

В большинстве второстепенных выпусков мы меняем интерфейс плагинов, поэтому плагины должны обновляться. В текущем стабильном пакете SpecFlow.Autofac указано, что он поддерживает SpecFlow >= 2.1. Это неправильно, потому что мы изменили интерфейс в версии 2.2.
Вы можете попробовать установить последнюю предварительную версию (https://www.nuget.org/packages/SpecFlow.Autofac/1.1.0-pre20171024), в котором говорится, что он поддерживает SpecFlow >= 2.2.1, но я я не уверен, изменили ли мы интерфейс плагина с 2.3.

person Andreas Willich    schedule 22.02.2018
comment
спасибо за ваш ответ, есть ли решение разрешить objectContainer поддерживать регистрацию внедрения зависимостей в соответствии с соглашениями? - person Mehdi; 22.02.2018
comment
Я не уверен, что вы имеете в виду под регистрацией по соглашениям. Но откройте вопрос на GitHub, и мы сможем обсудить его там. - person Andreas Willich; 22.02.2018