@@ -9,13 +9,13 @@ namespace PosInformatique.AspNet.WebForms.DependencyInjection.Tests
99 public class ServiceProviderAdapterTest
1010 {
1111 [ Fact ]
12- public void GetService_InServiceCollectionWithInjection ( )
12+ public void GetService_UsingServiceCollection_InServiceCollectionWithInjection ( )
1313 {
1414 var serviceCollection = new ServiceCollection ( ) ;
1515 serviceCollection . AddSingleton < IService , Service > ( ) ;
1616 serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
1717
18- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
18+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
1919
2020 var result = serviceProviderAdapter . GetService ( typeof ( IService ) ) . As < Service > ( ) ;
2121
@@ -30,7 +30,7 @@ public void GetService_InServiceCollectionWithInjection()
3030 }
3131
3232 [ Fact ]
33- public void GetService_NotInServiceCollectionUsingNextProvider ( )
33+ public void GetService_UsingServiceCollection_NotInServiceCollectionUsingNextProvider ( )
3434 {
3535 var serviceCollection = new ServiceCollection ( ) ;
3636
@@ -40,36 +40,36 @@ public void GetService_NotInServiceCollectionUsingNextProvider()
4040 nextServiceProvider . Setup ( sp => sp . GetService ( typeof ( IService ) ) )
4141 . Returns ( service ) ;
4242
43- var serviceProviderAdapter = new ServiceProviderAdapter ( nextServiceProvider . Object , serviceCollection ) ;
43+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , nextServiceProvider . Object ) ;
4444
4545 var result = serviceProviderAdapter . GetService ( typeof ( IService ) ) . As < Service > ( ) ;
4646
4747 result . Should ( ) . BeSameAs ( service ) ;
4848 }
4949
5050 [ Fact ]
51- public void GetService_NotInServiceCollectionAndNotInTheNextProvider ( )
51+ public void GetService_UsingServiceCollection_NotInServiceCollectionAndNotInTheNextProvider ( )
5252 {
5353 var serviceCollection = new ServiceCollection ( ) ;
5454
5555 var nextServiceProvider = new Mock < IServiceProvider > ( MockBehavior . Strict ) ;
5656 nextServiceProvider . Setup ( sp => sp . GetService ( typeof ( DependentService ) ) )
5757 . Returns ( null ) ;
5858
59- var serviceProviderAdapter = new ServiceProviderAdapter ( nextServiceProvider . Object , serviceCollection ) ;
59+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , nextServiceProvider . Object ) ;
6060
6161 var result = serviceProviderAdapter . GetService ( typeof ( DependentService ) ) . As < DependentService > ( ) ;
6262
6363 result . Should ( ) . NotBeNull ( ) ;
6464 }
6565
6666 [ Fact ]
67- public void GetService_WithInstantiationWithInjection ( )
67+ public void GetService_UsingServiceCollection_WithInstantiationWithInjection ( )
6868 {
6969 var serviceCollection = new ServiceCollection ( ) ;
7070 serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
7171
72- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
72+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
7373
7474 var result = serviceProviderAdapter . GetService ( typeof ( Service ) ) . As < Service > ( ) ;
7575
@@ -84,12 +84,12 @@ public void GetService_WithInstantiationWithInjection()
8484 }
8585
8686 [ Fact ]
87- public void GetService_WithInstantiationInternalConstructor ( )
87+ public void GetService_UsingServiceCollection_WithInstantiationInternalConstructor ( )
8888 {
8989 var serviceCollection = new ServiceCollection ( ) ;
9090 serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
9191
92- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
92+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
9393
9494 var result = serviceProviderAdapter . GetService ( typeof ( ServiceWithInternalConstructor ) ) . As < ServiceWithInternalConstructor > ( ) ;
9595
@@ -102,12 +102,12 @@ public void GetService_WithInstantiationInternalConstructor()
102102 }
103103
104104 [ Fact ]
105- public void GetService_WithInstantiationInternalClass ( )
105+ public void GetService_UsingServiceCollection_WithInstantiationInternalClass ( )
106106 {
107107 var serviceCollection = new ServiceCollection ( ) ;
108108 serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
109109
110- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
110+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
111111
112112 var result = serviceProviderAdapter . GetService ( typeof ( ServiceInternal ) ) . As < ServiceInternal > ( ) ;
113113
@@ -120,12 +120,12 @@ public void GetService_WithInstantiationInternalClass()
120120 }
121121
122122 [ Fact ]
123- public void Stop ( )
123+ public void Stop_UsingServiceCollection ( )
124124 {
125125 var serviceCollection = new ServiceCollection ( ) ;
126126 serviceCollection . AddSingleton < IDependentService , DependentService > ( ) ;
127127
128- var serviceProviderAdapter = new ServiceProviderAdapter ( null , serviceCollection ) ;
128+ var serviceProviderAdapter = new ServiceProviderAdapter ( serviceCollection , null ) ;
129129
130130 var result = serviceProviderAdapter . GetService ( typeof ( IDependentService ) ) . As < DependentService > ( ) ;
131131
@@ -142,6 +142,88 @@ public void Stop()
142142 . And . ObjectName . Should ( ) . Be ( "PosInformatique.AspNet.WebForms.DependencyInjection.ServiceProviderAdapter" ) ;
143143 }
144144
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+
145227 public interface IService
146228 {
147229 }
0 commit comments