|
1 | 1 | using System;
|
| 2 | +using System.Collections.Generic; |
2 | 3 | using JsonApiDotNetCore.Configuration;
|
3 | 4 | using JsonApiDotNetCore.Data;
|
4 | 5 | using JsonApiDotNetCore.Formatters;
|
@@ -38,6 +39,7 @@ internal sealed class JsonApiApplicationBuilder
|
38 | 39 | private IServiceDiscoveryFacade _serviceDiscoveryFacade;
|
39 | 40 | private IResourceGraphBuilder _resourceGraphBuilder;
|
40 | 41 | private readonly IMvcCoreBuilder _mvcBuilder;
|
| 42 | + private readonly List<ServiceProvider> _intermediateServiceProviders = new List<ServiceProvider>(); |
41 | 43 |
|
42 | 44 | public JsonApiApplicationBuilder(IServiceCollection services,
|
43 | 45 | IMvcCoreBuilder mvcBuilder)
|
@@ -96,23 +98,21 @@ public void ConfigureMvc()
|
96 | 98 | /// </summary>
|
97 | 99 | public void AddResourceGraph(Type dbContextType, Action<IResourceGraphBuilder> configureResources)
|
98 | 100 | {
|
99 |
| - using (var intermediateProvider = _services.BuildServiceProvider()) |
100 |
| - { |
101 |
| - AutoDiscoverResources(_serviceDiscoveryFacade); |
102 |
| - AddResourcesFromDbContext(dbContextType, intermediateProvider, _resourceGraphBuilder); |
103 |
| - UserConfigureResources(configureResources, _resourceGraphBuilder); |
104 |
| - _services.AddSingleton(_resourceGraphBuilder.Build()); |
105 |
| - } |
| 101 | + var intermediateProvider = _services.BuildServiceProvider(); |
| 102 | + AutoDiscoverResources(_serviceDiscoveryFacade); |
| 103 | + AddResourcesFromDbContext(dbContextType, intermediateProvider, _resourceGraphBuilder); |
| 104 | + UserConfigureResources(configureResources, _resourceGraphBuilder); |
| 105 | + _services.AddSingleton(_resourceGraphBuilder.Build()); |
| 106 | + _intermediateServiceProviders.Add(intermediateProvider); |
106 | 107 | }
|
107 | 108 |
|
108 | 109 | public void ConfigureAutoDiscovery(Action<IServiceDiscoveryFacade> configureAutoDiscovery)
|
109 | 110 | {
|
110 |
| - using (var intermediateProvider = _services.BuildServiceProvider()) |
111 |
| - { |
112 |
| - _serviceDiscoveryFacade = intermediateProvider.GetRequiredService<IServiceDiscoveryFacade>(); |
113 |
| - _resourceGraphBuilder = intermediateProvider.GetRequiredService<IResourceGraphBuilder>(); |
114 |
| - RegisterDiscoverableAssemblies(configureAutoDiscovery, _serviceDiscoveryFacade); |
115 |
| - } |
| 111 | + var intermediateProvider = _services.BuildServiceProvider(); |
| 112 | + _serviceDiscoveryFacade = intermediateProvider.GetRequiredService<IServiceDiscoveryFacade>(); |
| 113 | + _resourceGraphBuilder = intermediateProvider.GetRequiredService<IResourceGraphBuilder>(); |
| 114 | + RegisterDiscoverableAssemblies(configureAutoDiscovery, _serviceDiscoveryFacade); |
| 115 | + _intermediateServiceProviders.Add(intermediateProvider); |
116 | 116 | }
|
117 | 117 |
|
118 | 118 | private void RegisterDiscoverableAssemblies(Action<IServiceDiscoveryFacade> configureAutoDiscovery, IServiceDiscoveryFacade serviceDiscoveryFacade)
|
@@ -246,6 +246,14 @@ private void AddQueryStringParameterServices()
|
246 | 246 | _services.AddSingleton<IRequestQueryStringAccessor, RequestQueryStringAccessor>();
|
247 | 247 | }
|
248 | 248 |
|
| 249 | + public void DisposeIntermediateProviders() |
| 250 | + { |
| 251 | + foreach (var sp in _intermediateServiceProviders) |
| 252 | + { |
| 253 | + sp.Dispose(); |
| 254 | + } |
| 255 | + } |
| 256 | + |
249 | 257 | private void AddResourceHooks()
|
250 | 258 | {
|
251 | 259 | _services.AddSingleton(typeof(IHooksDiscovery<>), typeof(HooksDiscovery<>));
|
|
0 commit comments