Skip to content
This repository was archived by the owner on May 22, 2024. It is now read-only.

Commit df94a46

Browse files
authored
Setup Feature and TestThread dependencies (#34)
Contributor: @ConnorChristie +semver: feature
1 parent dd65e8e commit df94a46

File tree

1 file changed

+58
-10
lines changed

1 file changed

+58
-10
lines changed

SpecFlow.DependencyInjection/DependencyInjectionPlugin.cs

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,37 +39,85 @@ public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginPar
3939
var serviceCollectionFinder = args.ObjectContainer.Resolve<IServiceCollectionFinder>();
4040
var createScenarioServiceCollection = serviceCollectionFinder.GetCreateScenarioServiceCollection();
4141
var services = createScenarioServiceCollection();
42-
RegisterSpecFlowDependencies(args.ObjectContainer, services);
42+
43+
RegisterObjectContainer(args.ObjectContainer, services);
44+
RegisterScenarioSpecFlowDependencies(services);
45+
RegisterFeatureSpecFlowDependencies(services);
46+
RegisterTestThreadSpecFlowDependencies(services);
47+
48+
return services.BuildServiceProvider();
49+
});
50+
};
51+
52+
runtimePluginEvents.CustomizeFeatureDependencies += (sender, args) =>
53+
{
54+
args.ObjectContainer.RegisterFactoryAs<IServiceProvider>(() =>
55+
{
56+
var serviceCollectionFinder = args.ObjectContainer.Resolve<IServiceCollectionFinder>();
57+
var createScenarioServiceCollection = serviceCollectionFinder.GetCreateScenarioServiceCollection();
58+
var services = createScenarioServiceCollection();
59+
60+
RegisterObjectContainer(args.ObjectContainer, services);
61+
RegisterFeatureSpecFlowDependencies(services);
62+
RegisterTestThreadSpecFlowDependencies(services);
63+
64+
return services.BuildServiceProvider();
65+
});
66+
};
67+
68+
runtimePluginEvents.CustomizeTestThreadDependencies += (sender, args) =>
69+
{
70+
args.ObjectContainer.RegisterFactoryAs<IServiceProvider>(() =>
71+
{
72+
var serviceCollectionFinder = args.ObjectContainer.Resolve<IServiceCollectionFinder>();
73+
var createScenarioServiceCollection = serviceCollectionFinder.GetCreateScenarioServiceCollection();
74+
var services = createScenarioServiceCollection();
75+
76+
RegisterObjectContainer(args.ObjectContainer, services);
77+
RegisterTestThreadSpecFlowDependencies(services);
78+
4379
return services.BuildServiceProvider();
4480
});
4581
};
4682
}
4783

48-
private void RegisterSpecFlowDependencies(
84+
private static void RegisterObjectContainer(
4985
IObjectContainer objectContainer,
5086
IServiceCollection services)
5187
{
52-
services.AddTransient<IObjectContainer>(ctx =>
53-
{
54-
return objectContainer;
55-
});
88+
services.AddTransient<IObjectContainer>(ctx => objectContainer);
89+
}
90+
91+
private static void RegisterScenarioSpecFlowDependencies(
92+
IServiceCollection services)
93+
{
5694
services.AddTransient<ScenarioContext>(ctx =>
5795
{
5896
var specflowContainer = ctx.GetService<IObjectContainer>();
5997
var scenarioContext = specflowContainer.Resolve<ScenarioContext>();
6098
return scenarioContext;
6199
});
100+
}
101+
102+
private static void RegisterFeatureSpecFlowDependencies(
103+
IServiceCollection services)
104+
{
62105
services.AddTransient<FeatureContext>(ctx =>
63106
{
64107
var specflowContainer = ctx.GetService<IObjectContainer>();
65-
var scenarioContext = specflowContainer.Resolve<FeatureContext>();
66-
return scenarioContext;
108+
var featureContext = specflowContainer.Resolve<FeatureContext>();
109+
return featureContext;
67110
});
111+
}
112+
113+
private static void RegisterTestThreadSpecFlowDependencies(
114+
IServiceCollection services)
115+
{
68116
services.AddTransient<TestThreadContext>(ctx =>
69117
{
70118
var specflowContainer = ctx.GetService<IObjectContainer>();
71-
var scenarioContext = specflowContainer.Resolve<TestThreadContext>();
72-
return scenarioContext;
119+
var testThreadContext = specflowContainer.Resolve<TestThreadContext>();
120+
return testThreadContext;
73121
});
74122
}
75123
}

0 commit comments

Comments
 (0)