В настоящее время я пытаюсь настроить новый .NET Core Project с Speflow и подключить к нему Microsoft Dependency Injection по умолчанию.
После изучения документации и Autofac / * 1005Реализация * Ninject Я попытался реализовать свой собственный плагин RunTime "SpecFlow.MSDependencyInjection.SpecFlowPlugin".
Сейчас я изо всех сил пытаюсь разрешить специфическую инфраструктуру Specflow, такую как ScenarioContext.
public static class DependencyInjectionExtension
{
private static void RegisterSpecflowDependecies(IObjectContainer objectContainer, ServiceCollection serviceCollection)
{
serviceCollection.AddSingleton(objectContainer);
serviceCollection.AddSingleton((x) =>
{
var specflowContainer = x.GetRequiredService<IObjectContainer>();
var scenarioContext = specflowContainer.Resolve<ScenarioContext>();
return scenarioContext;
});
serviceCollection.AddSingleton((x) =>
{
var specflowContainer = x.GetRequiredService<IObjectContainer>();
var scenarioContext = specflowContainer.Resolve<FeatureContext>();
return scenarioContext;
});
serviceCollection.AddSingleton((x) =>
{
var specflowContainer = x.GetRequiredService<IObjectContainer>();
var scenarioContext = specflowContainer.Resolve<TestThreadContext>();
return scenarioContext;
});
}
[ScenarioDependencies]
public static IServiceProvider CreateServiceCollection(IObjectContainer objectContainer)
{
var serviceCollection = new ServiceCollection();
RegisterSpecflowDependecies(objectContainer, serviceCollection);
var bindingAttributeClasses = typeof(DependencyInjectionExtension).Assembly.GetTypes()
.Where(t => Attribute.IsDefined(t, typeof(BindingAttribute))).ToArray();
foreach (var bindingAttributeClass in bindingAttributeClasses)
{
serviceCollection.AddSingleton(bindingAttributeClass);
}
return serviceCollection.BuildServiceProvider();
}
}
Когда Specflow пытается разрешить одну из моих привязок, я получаю следующее исключение:
BoDi.ObjectContainerException: 'Primitive types or structs cannot be resolved: System.String (resolution path: TechTalk.SpecFlow.ScenarioContext->TechTalk.SpecFlow.ScenarioInfo)'
Код RegisterSpecflowDependecies очень похож на Autofac реализация.Поэтому я не понимаю, почему это не работает в моей реализации.