gpt4 book ai didi

c# - Specflow - 使用来自 .NET Core 的 Microsoft 依赖注入(inject)导致 BoDi.ObjectContainerException

转载 作者:行者123 更新时间:2023-12-05 07:24:23 26 4
gpt4 key购买 nike

我目前正在尝试使用 Speflow 设置一个新的 .NET Core 项目并将默认的 Microsoft 依赖注入(inject)连接到它。

在研究文档和 Autofac 之后/Ninject实现 我尝试实现自己的运行时插件“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 尝试解析我的绑定(bind)之一时,出现以下异常:

BoDi.ObjectContainerException: 'Primitive types or structs cannot be resolved: System.String (resolution path: TechTalk.SpecFlow.ScenarioContext->TechTalk.SpecFlow.ScenarioInfo)'

RegisterSpecflowDependecies 的代码与 Autofac 非常相似执行。所以我不明白为什么它在我的实现中不起作用。

最佳答案

其中一个构造函数似乎有一个字符串参数。

您可以将该构造函数包装在另一个以其他方式获取参数的类中:

class MyWrapper : ClassThatHasAStringParameter
{
public MyWrapper()
: base("PARAMETER_VALUE")
{
}
}

关于c# - Specflow - 使用来自 .NET Core 的 Microsoft 依赖注入(inject)导致 BoDi.ObjectContainerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55472623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com