-
Notifications
You must be signed in to change notification settings - Fork 0
/
GetServiceTests.cs
151 lines (119 loc) · 5.25 KB
/
GetServiceTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using DependencyInjection.Tests.Shared;
namespace DependencyInjection.Tests;
public class GetServiceTests
{
[Fact]
public void GetService_WithTransientServiceAndImplementationType_ShouldResolveByService()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddTransient<IService, ServiceA>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var byServiceType = serviceProvider.GetService<IService>();
Assert.NotNull(byServiceType);
Assert.IsType<ServiceA>(byServiceType);
var byImplementationType = serviceProvider.GetService<ServiceA>();
Assert.Null(byImplementationType);
}
[Fact]
public void GetService_WithTransientServiceType_ShouldResolveByService()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddTransient(typeof(ServiceA));
var serviceProvider = serviceCollection.BuildServiceProvider();
var byServiceType = serviceProvider.GetService<ServiceA>();
Assert.NotNull(byServiceType);
Assert.IsType<ServiceA>(byServiceType);
var byInheritedType = serviceProvider.GetService<IService>();
Assert.Null(byInheritedType);
}
[Fact]
public void GetService_WithScopedServiceAndImplementationType_ShouldResolveByService()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddScoped<IService, ServiceA>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var byServiceType = serviceProvider.GetService<IService>();
Assert.NotNull(byServiceType);
Assert.IsType<ServiceA>(byServiceType);
var byImplementationType = serviceProvider.GetService<ServiceA>();
Assert.Null(byImplementationType);
}
[Fact]
public void GetService_WithScopedServiceType_ShouldResolveByService()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddScoped(typeof(ServiceA));
var serviceProvider = serviceCollection.BuildServiceProvider();
var byServiceType = serviceProvider.GetService<ServiceA>();
Assert.NotNull(byServiceType);
Assert.IsType<ServiceA>(byServiceType);
var byInheritedType = serviceProvider.GetService<IService>();
Assert.Null(byInheritedType);
}
[Fact]
public void GetService_WithSingletonServiceAndImplementationType_ShouldResolveByService()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IService, ServiceA>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var byServiceType = serviceProvider.GetService<IService>();
Assert.NotNull(byServiceType);
Assert.IsType<ServiceA>(byServiceType);
var byImplementationType = serviceProvider.GetService<ServiceA>();
Assert.Null(byImplementationType);
}
[Fact]
public void GetService_WithSingletonServiceType_ShouldResolveByService()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton(typeof(ServiceA));
var serviceProvider = serviceCollection.BuildServiceProvider();
var byServiceType = serviceProvider.GetService<ServiceA>();
Assert.NotNull(byServiceType);
Assert.IsType<ServiceA>(byServiceType);
var byInheritedType = serviceProvider.GetService<IService>();
Assert.Null(byInheritedType);
}
[Fact]
public void GetServices_WithRegisteredService_ShouldReturnService()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddTransient<IService, ServiceA>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var services = serviceProvider.GetServices<IService>();
Assert.NotNull(services);
Assert.Single(services);
Assert.All(services, service => Assert.IsType<ServiceA>(service));
}
[Fact]
public void GetServices_WithSeveralOfSameInheritedType_ShouldReturnServices()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddTransient<IService, ServiceA>();
serviceCollection.AddTransient<IService, ServiceB>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var services = serviceProvider.GetServices<IService>();
Assert.NotNull(services);
Assert.Equal(2, services.Count());
Assert.All(services, service => Assert.IsAssignableFrom<IService>(service));
}
[Fact]
public void GetServices_WithDifferentTypesRegistered_ShouldOnlyReturnRequestedType()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddTransient<IService, ServiceA>();
serviceCollection.AddTransient<IService, ServiceB>();
serviceCollection.AddTransient<IAnotherService, AnotherService>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var services = serviceProvider.GetServices<IService>();
Assert.NotNull(services);
Assert.Equal(2, services.Count());
Assert.All(services, service => Assert.IsAssignableFrom<IService>(service));
}
private interface IAnotherService
{
}
public class AnotherService : IAnotherService
{
}
}