@@ -9,13 +9,13 @@ namespace PosInformatique.AspNet.WebForms.DependencyInjection.Tests
9
9
public class ServiceProviderAdapterTest
10
10
{
11
11
[ Fact ]
12
- public void GetService_InServiceCollectionWithInjection ( )
12
+ public void GetService_UsingServiceCollection_InServiceCollectionWithInjection ( )
13
13
{
14
14
var serviceCollection = new ServiceCollection ( ) ;
15
15
serviceCollection . AddSingleton < IService , Service > ( ) ;
16
16
serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
17
17
18
- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
18
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
19
19
20
20
var result = serviceProviderAdapter . GetService ( typeof ( IService ) ) . As < Service > ( ) ;
21
21
@@ -30,7 +30,7 @@ public void GetService_InServiceCollectionWithInjection()
30
30
}
31
31
32
32
[ Fact ]
33
- public void GetService_NotInServiceCollectionUsingNextProvider ( )
33
+ public void GetService_UsingServiceCollection_NotInServiceCollectionUsingNextProvider ( )
34
34
{
35
35
var serviceCollection = new ServiceCollection ( ) ;
36
36
@@ -40,36 +40,36 @@ public void GetService_NotInServiceCollectionUsingNextProvider()
40
40
nextServiceProvider . Setup ( sp => sp . GetService ( typeof ( IService ) ) )
41
41
. Returns ( service ) ;
42
42
43
- var serviceProviderAdapter = new ServiceProviderAdapter ( nextServiceProvider . Object , serviceCollection ) ;
43
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , nextServiceProvider . Object ) ;
44
44
45
45
var result = serviceProviderAdapter . GetService ( typeof ( IService ) ) . As < Service > ( ) ;
46
46
47
47
result . Should ( ) . BeSameAs ( service ) ;
48
48
}
49
49
50
50
[ Fact ]
51
- public void GetService_NotInServiceCollectionAndNotInTheNextProvider ( )
51
+ public void GetService_UsingServiceCollection_NotInServiceCollectionAndNotInTheNextProvider ( )
52
52
{
53
53
var serviceCollection = new ServiceCollection ( ) ;
54
54
55
55
var nextServiceProvider = new Mock < IServiceProvider > ( MockBehavior . Strict ) ;
56
56
nextServiceProvider . Setup ( sp => sp . GetService ( typeof ( DependentService ) ) )
57
57
. Returns ( null ) ;
58
58
59
- var serviceProviderAdapter = new ServiceProviderAdapter ( nextServiceProvider . Object , serviceCollection ) ;
59
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , nextServiceProvider . Object ) ;
60
60
61
61
var result = serviceProviderAdapter . GetService ( typeof ( DependentService ) ) . As < DependentService > ( ) ;
62
62
63
63
result . Should ( ) . NotBeNull ( ) ;
64
64
}
65
65
66
66
[ Fact ]
67
- public void GetService_WithInstantiationWithInjection ( )
67
+ public void GetService_UsingServiceCollection_WithInstantiationWithInjection ( )
68
68
{
69
69
var serviceCollection = new ServiceCollection ( ) ;
70
70
serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
71
71
72
- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
72
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
73
73
74
74
var result = serviceProviderAdapter . GetService ( typeof ( Service ) ) . As < Service > ( ) ;
75
75
@@ -84,12 +84,12 @@ public void GetService_WithInstantiationWithInjection()
84
84
}
85
85
86
86
[ Fact ]
87
- public void GetService_WithInstantiationInternalConstructor ( )
87
+ public void GetService_UsingServiceCollection_WithInstantiationInternalConstructor ( )
88
88
{
89
89
var serviceCollection = new ServiceCollection ( ) ;
90
90
serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
91
91
92
- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
92
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
93
93
94
94
var result = serviceProviderAdapter . GetService ( typeof ( ServiceWithInternalConstructor ) ) . As < ServiceWithInternalConstructor > ( ) ;
95
95
@@ -102,12 +102,12 @@ public void GetService_WithInstantiationInternalConstructor()
102
102
}
103
103
104
104
[ Fact ]
105
- public void GetService_WithInstantiationInternalClass ( )
105
+ public void GetService_UsingServiceCollection_WithInstantiationInternalClass ( )
106
106
{
107
107
var serviceCollection = new ServiceCollection ( ) ;
108
108
serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
109
109
110
- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
110
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
111
111
112
112
var result = serviceProviderAdapter . GetService ( typeof ( ServiceInternal ) ) . As < ServiceInternal > ( ) ;
113
113
@@ -120,12 +120,12 @@ public void GetService_WithInstantiationInternalClass()
120
120
}
121
121
122
122
[ Fact ]
123
- public void Stop ( )
123
+ public void Stop_UsingServiceCollection ( )
124
124
{
125
125
var serviceCollection = new ServiceCollection ( ) ;
126
126
serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
127
127
128
- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
128
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
129
129
130
130
var result = serviceProviderAdapter . GetService ( typeof ( IDependentService ) ) . As < DependentService > ( ) ;
131
131
@@ -142,6 +142,88 @@ public void Stop()
142
142
. And . ObjectName . Should ( ) . Be ( "PosInformatique.AspNet.WebForms.DependencyInjection.ServiceProviderAdapter" ) ;
143
143
}
144
144
145
+ [ Fact ]
146
+ public void GetService_UsingServiceProvider_InServiceCollectionWithInjection ( )
147
+ {
148
+ var service1 = Mock . Of < IService > ( ) ;
149
+ var service2 = Mock . Of < IService > ( ) ;
150
+
151
+ var serviceProvider = new Mock < IServiceProvider > ( MockBehavior . Strict ) ;
152
+ serviceProvider . SetupSequence ( sp => sp . GetService ( typeof ( IService ) ) )
153
+ . Returns ( service1 )
154
+ . Returns ( service2 ) ;
155
+
156
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceProvider . Object , null ) ;
157
+
158
+ serviceProviderAdapter . GetService ( typeof ( IService ) ) . Should ( ) . BeSameAs ( service1 ) ;
159
+
160
+ // Calls again to check the internal cache have not problem
161
+ serviceProviderAdapter . GetService ( typeof ( IService ) ) . Should ( ) . BeSameAs ( service2 ) ;
162
+ }
163
+
164
+ [ Fact ]
165
+ public void GetService_UsingServiceProvider_NotInServiceCollectionUsingNextProvider ( )
166
+ {
167
+ var serviceProvider = new Mock < IServiceProvider > ( MockBehavior . Strict ) ;
168
+ serviceProvider . Setup ( sp => sp . GetService ( typeof ( IService ) ) )
169
+ . Returns ( null ) ;
170
+
171
+ var service = new Service ( null ) ;
172
+
173
+ var nextServiceProvider = new Mock < IServiceProvider > ( MockBehavior . Strict ) ;
174
+ nextServiceProvider . Setup ( sp => sp . GetService ( typeof ( IService ) ) )
175
+ . Returns ( service ) ;
176
+
177
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceProvider . Object , nextServiceProvider . Object ) ;
178
+
179
+ var result = serviceProviderAdapter . GetService ( typeof ( IService ) ) . As < Service > ( ) ;
180
+
181
+ result . Should ( ) . BeSameAs ( service ) ;
182
+ }
183
+
184
+ [ Fact ]
185
+ public void GetService_UsingServiceProvider_NotInServiceCollectionAndNotInTheNextProvider ( )
186
+ {
187
+ var serviceProvider = new Mock < IServiceProvider > ( MockBehavior . Strict ) ;
188
+ serviceProvider . Setup ( sp => sp . GetService ( typeof ( DependentService ) ) )
189
+ . Returns ( null ) ;
190
+
191
+ var nextServiceProvider = new Mock < IServiceProvider > ( MockBehavior . Strict ) ;
192
+ nextServiceProvider . Setup ( sp => sp . GetService ( typeof ( DependentService ) ) )
193
+ . Returns ( null ) ;
194
+
195
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceProvider . Object , nextServiceProvider . Object ) ;
196
+
197
+ var result = serviceProviderAdapter . GetService ( typeof ( DependentService ) ) ;
198
+
199
+ result . Should ( ) . NotBeNull ( ) ;
200
+ }
201
+
202
+ [ Fact ]
203
+ public void Stop_UsingServiceProvider ( )
204
+ {
205
+ var dependentService = Mock . Of < IDependentService > ( ) ;
206
+
207
+ var serviceProvider = new Mock < IServiceProvider > ( MockBehavior . Strict ) ;
208
+ serviceProvider . As < IDisposable > ( ) ;
209
+ serviceProvider . Setup ( sp => sp . GetService ( typeof ( IDependentService ) ) )
210
+ . Returns ( dependentService ) ;
211
+
212
+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceProvider . Object , null ) ;
213
+
214
+ serviceProviderAdapter . GetService ( typeof ( IDependentService ) ) . As < DependentService > ( ) ;
215
+
216
+ // Stop() the adapter, it is mean we dispose the provider BUT the no
217
+ serviceProviderAdapter . Stop ( true ) ;
218
+
219
+ // Verify the Dispose() method is not called for a IServiceProvider which implement the IDisposable interface
220
+ serviceProvider . As < IDisposable > ( ) . Verify ( sp => sp . Dispose ( ) , Times . Never ) ;
221
+
222
+ // Check the ObjectDisposedException if calling the GetService() method
223
+ serviceProviderAdapter . Invoking ( spa => spa . GetService ( typeof ( IDependentService ) ) ) . Should ( ) . ThrowExactly < ObjectDisposedException > ( )
224
+ . And . ObjectName . Should ( ) . Be ( "PosInformatique.AspNet.WebForms.DependencyInjection.ServiceProviderAdapter" ) ;
225
+ }
226
+
145
227
public interface IService
146
228
{
147
229
}
0 commit comments