Skip to content

Commit d5a87df

Browse files
author
Bart Koelman
committed
Moved resolving inverse relationships to configuration phase.
1 parent ccae41a commit d5a87df

File tree

3 files changed

+27
-14
lines changed

3 files changed

+27
-14
lines changed

src/JsonApiDotNetCore/Builders/JsonApiApplicationBuilder.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,22 @@ public void ConfigureMvc(Type dbContextType)
6262
{
6363
RegisterJsonApiStartupServices();
6464

65-
var intermediateProvider = _services.BuildServiceProvider();
66-
_resourceGraphBuilder = intermediateProvider.GetRequiredService<IResourceGraphBuilder>();
67-
_serviceDiscoveryFacade = intermediateProvider.GetRequiredService<IServiceDiscoveryFacade>();
68-
_dbContextType = dbContextType;
65+
IJsonApiExceptionFilterProvider exceptionFilterProvider;
66+
IJsonApiTypeMatchFilterProvider typeMatchFilterProvider;
67+
IJsonApiRoutingConvention routingConvention;
6968

70-
AddResourceTypesFromDbContext(intermediateProvider);
69+
using (var intermediateProvider = _services.BuildServiceProvider())
70+
{
71+
_resourceGraphBuilder = intermediateProvider.GetRequiredService<IResourceGraphBuilder>();
72+
_serviceDiscoveryFacade = intermediateProvider.GetRequiredService<IServiceDiscoveryFacade>();
73+
_dbContextType = dbContextType;
74+
75+
AddResourceTypesFromDbContext(intermediateProvider);
7176

72-
var exceptionFilterProvider = intermediateProvider.GetRequiredService<IJsonApiExceptionFilterProvider>();
73-
var typeMatchFilterProvider = intermediateProvider.GetRequiredService<IJsonApiTypeMatchFilterProvider>();
74-
var routingConvention = intermediateProvider.GetRequiredService<IJsonApiRoutingConvention>();
77+
exceptionFilterProvider = intermediateProvider.GetRequiredService<IJsonApiExceptionFilterProvider>();
78+
typeMatchFilterProvider = intermediateProvider.GetRequiredService<IJsonApiTypeMatchFilterProvider>();
79+
routingConvention = intermediateProvider.GetRequiredService<IJsonApiRoutingConvention>();
80+
}
7581

7682
_mvcBuilder.AddMvcOptions(options =>
7783
{

src/JsonApiDotNetCore/Extensions/ApplicationBuilderExtensions.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@ public static class ApplicationBuilderExtensions
2929
/// </example>
3030
public static void UseJsonApi(this IApplicationBuilder app, bool skipRegisterMiddleware = false, bool useAuthentication = false, bool useAuthorization = false)
3131
{
32-
using (var scope = app.ApplicationServices.CreateScope())
33-
{
34-
var inverseRelationshipResolver = scope.ServiceProvider.GetService<IInverseRelationships>();
35-
inverseRelationshipResolver?.Resolve();
36-
}
37-
3832
if (!skipRegisterMiddleware)
3933
{
4034
// An endpoint is selected and set on the HttpContext if a match is found

src/JsonApiDotNetCore/Extensions/ServiceCollectionExtensions.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public static IServiceCollection AddJsonApi(this IServiceCollection services,
2626
IMvcCoreBuilder mvcBuilder = null)
2727
{
2828
SetupApplicationBuilder(services, options, discovery, resources, mvcBuilder, null);
29+
ResolveInverseRelationships(services);
30+
2931
return services;
3032
}
3133

@@ -40,6 +42,8 @@ public static IServiceCollection AddJsonApi<TDbContext>(this IServiceCollection
4042
where TDbContext : DbContext
4143
{
4244
SetupApplicationBuilder(services, options, discovery, resources, mvcBuilder, typeof(TDbContext));
45+
ResolveInverseRelationships(services);
46+
4347
return services;
4448
}
4549

@@ -56,6 +60,15 @@ private static void SetupApplicationBuilder(IServiceCollection services, Action<
5660
applicationBuilder.ConfigureServices();
5761
}
5862

63+
private static void ResolveInverseRelationships(IServiceCollection services)
64+
{
65+
using var intermediateProvider = services.BuildServiceProvider();
66+
using var scope = intermediateProvider.CreateScope();
67+
68+
var inverseRelationshipResolver = scope.ServiceProvider.GetService<IInverseRelationships>();
69+
inverseRelationshipResolver?.Resolve();
70+
}
71+
5972
/// <summary>
6073
/// Enables client serializers for sending requests and receiving responses
6174
/// in json:api format. Internally only used for testing.

0 commit comments

Comments
 (0)