Инжектиране на зависимост от 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