Skip to content

Commit 91024a4

Browse files
committed
fix: attempt to fix win dispose bug
1 parent 7ab38f9 commit 91024a4

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

src/JsonApiDotNetCore/Builders/JsonApiApplicationBuilder.cs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using JsonApiDotNetCore.Configuration;
34
using JsonApiDotNetCore.Data;
45
using JsonApiDotNetCore.Formatters;
@@ -38,6 +39,7 @@ internal sealed class JsonApiApplicationBuilder
3839
private IServiceDiscoveryFacade _serviceDiscoveryFacade;
3940
private IResourceGraphBuilder _resourceGraphBuilder;
4041
private readonly IMvcCoreBuilder _mvcBuilder;
42+
private readonly List<ServiceProvider> _intermediateServiceProviders = new List<ServiceProvider>();
4143

4244
public JsonApiApplicationBuilder(IServiceCollection services,
4345
IMvcCoreBuilder mvcBuilder)
@@ -96,23 +98,21 @@ public void ConfigureMvc()
9698
/// </summary>
9799
public void AddResourceGraph(Type dbContextType, Action<IResourceGraphBuilder> configureResources)
98100
{
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);
106107
}
107108

108109
public void ConfigureAutoDiscovery(Action<IServiceDiscoveryFacade> configureAutoDiscovery)
109110
{
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);
116116
}
117117

118118
private void RegisterDiscoverableAssemblies(Action<IServiceDiscoveryFacade> configureAutoDiscovery, IServiceDiscoveryFacade serviceDiscoveryFacade)
@@ -246,6 +246,14 @@ private void AddQueryStringParameterServices()
246246
_services.AddSingleton<IRequestQueryStringAccessor, RequestQueryStringAccessor>();
247247
}
248248

249+
public void DisposeIntermediateProviders()
250+
{
251+
foreach (var sp in _intermediateServiceProviders)
252+
{
253+
sp.Dispose();
254+
}
255+
}
256+
249257
private void AddResourceHooks()
250258
{
251259
_services.AddSingleton(typeof(IHooksDiscovery<>), typeof(HooksDiscovery<>));

src/JsonApiDotNetCore/Extensions/ServiceCollectionExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ private static void SetupApplicationBuilder(IServiceCollection services, Action<
6060
applicationBuilder.ConfigureMvc();
6161
applicationBuilder.DiscoverInjectables();
6262
applicationBuilder.ConfigureServices(dbContextType);
63+
applicationBuilder.DisposeIntermediateProviders();
6364
}
6465

6566
private static void ResolveInverseRelationships(IServiceCollection services)

0 commit comments

Comments
 (0)