11using System ;
2-
2+ using System . Collections ;
3+ using System . Collections . Generic ;
34using Microsoft . Extensions . DependencyInjection ;
45using Microsoft . Extensions . DependencyInjection . Specification ;
6+ using Microsoft . Extensions . DependencyInjection . Specification . Fakes ;
7+ using Xunit ;
58
69namespace Unity . Microsoft . DependencyInjection . Tests
710{
@@ -12,23 +15,67 @@ protected override IServiceProvider CreateServiceProvider(IServiceCollection ser
1215 var container = new UnityContainer ( ) ;
1316 return container . Configure ( serviceCollection ) ;
1417 }
18+
19+ internal class TestServiceCollection : List < ServiceDescriptor > , IServiceCollection , IList < ServiceDescriptor > , ICollection < ServiceDescriptor > , IEnumerable < ServiceDescriptor > , IEnumerable
20+ {
21+ }
22+
23+ [ Fact ]
24+ public void Disposing_ScopeDisposesService ( )
25+ {
26+
27+ // Arrange
28+
29+ var collection = new TestServiceCollection ( ) ;
30+
31+ collection . AddSingleton < IFakeSingletonService , FakeService > ( ) ;
32+ collection . AddScoped < IFakeScopedService , FakeService > ( ) ;
33+ collection . AddTransient < IFakeService , FakeService > ( ) ;
34+
35+
36+
37+ var provider = CreateServiceProvider ( collection ) ;
38+
39+ FakeService disposableService ;
40+ FakeService transient1 ;
41+ FakeService transient2 ;
42+ FakeService singleton ;
43+
44+
45+
46+ // Act and Assert
47+
48+ var transient3 = Assert . IsType < FakeService > ( provider . GetService < IFakeService > ( ) ) ;
49+
50+ using ( var scope = provider . CreateScope ( ) )
51+ {
52+ disposableService = ( FakeService ) scope . ServiceProvider . GetService < IFakeScopedService > ( ) ;
53+ transient1 = ( FakeService ) scope . ServiceProvider . GetService < IFakeService > ( ) ;
54+ transient2 = ( FakeService ) scope . ServiceProvider . GetService < IFakeService > ( ) ;
55+ singleton = ( FakeService ) scope . ServiceProvider . GetService < IFakeSingletonService > ( ) ;
56+
57+
58+ Assert . False ( disposableService . Disposed ) ;
59+ Assert . False ( transient1 . Disposed ) ;
60+ Assert . False ( transient2 . Disposed ) ;
61+ Assert . False ( singleton . Disposed ) ;
62+
63+ }
64+
65+ Assert . True ( disposableService . Disposed ) ;
66+ Assert . True ( transient1 . Disposed ) ;
67+ Assert . True ( transient2 . Disposed ) ;
68+ Assert . False ( singleton . Disposed ) ;
69+
70+
71+ var disposableProvider = provider as IDisposable ;
72+ if ( disposableProvider != null )
73+ {
74+ disposableProvider . Dispose ( ) ;
75+ Assert . True ( singleton . Disposed ) ;
76+ Assert . True ( transient3 . Disposed ) ;
77+ }
78+
79+ }
1580 }
16- //public sealed class UnityDependencyInjectionTests : DependencyInjectionSpecificationTests
17- //{
18- // /// <inheritdoc />
19- // protected override IServiceProvider CreateServiceProvider(IServiceCollection serviceCollection)
20- // {
21- // var container = new UnityContainer();
22- // var provider = new ServiceProvider(container);
23-
24- // foreach (ServiceDescriptor service in serviceCollection)
25- // {
26- // container.RegisterType(
27- // service.ServiceType,
28- // service.ImplementationType);
29- // }
30-
31- // return provider;
32- // }
33- //}
3481}
0 commit comments