Skip to content

Commit 8fdcd0f

Browse files
committed
.
1 parent 6497fed commit 8fdcd0f

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

src/Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.0" />
1717
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
1818
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
19+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />
1920
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
2021
<PackageVersion Include="NUnit" Version="4.2.2" />
2122
<PackageVersion Include="MSTest" Version="3.6.3" />
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
using TUnit.Core.Interfaces;
3+
4+
public class DependencyInjectionClassConstructor : IClassConstructor, ITestEndEvent
5+
{
6+
private static readonly IServiceProvider _serviceProvider = CreateServiceProvider();
7+
8+
private AsyncServiceScope _scope;
9+
10+
public T Create<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T>(ClassConstructorMetadata classConstructorMetadata)
11+
where T : class
12+
{
13+
_scope = _serviceProvider.CreateAsyncScope();
14+
15+
return ActivatorUtilities.GetServiceOrCreateInstance<T>(_scope.ServiceProvider);
16+
}
17+
18+
public ValueTask OnTestEnd(TestContext testContext)
19+
{
20+
return _scope.DisposeAsync();
21+
}
22+
23+
private static IServiceProvider CreateServiceProvider()
24+
{
25+
return new ServiceCollection()
26+
.AddSingleton<SomeClass1>()
27+
.AddSingleton<SomeClass2>()
28+
.AddTransient<SomeClass3>()
29+
.BuildServiceProvider();
30+
}
31+
}
32+
33+
[ClassConstructor<DependencyInjectionClassConstructor>]
34+
public class MyTestClass(SomeClass1 someClass1, SomeClass2 someClass2, SomeClass3 someClass3)
35+
{
36+
[Test]
37+
public async Task Test()
38+
{
39+
// ...
40+
}
41+
}

src/Verify.TUnit.Tests/Verify.TUnit.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
1314
<PackageReference Include="ProjectDefaults" PrivateAssets="all" />
1415

1516
<ProjectReference Include="..\TargetLibrary\TargetLibrary.csproj" />

0 commit comments

Comments
 (0)