Skip to content

Commit 3840fcb

Browse files
committed
Provide internal hook to replace ResourceObjectConverter once the resource graph has been built (needed for OpenAPI support)
1 parent cbe6359 commit 3840fcb

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using JsonApiDotNetCore.Serialization.JsonConverters;
2+
3+
namespace JsonApiDotNetCore.Configuration;
4+
5+
internal sealed class DefaultJsonApiApplicationBuilderEvents : IJsonApiApplicationBuilderEvents
6+
{
7+
private readonly IJsonApiOptions _options;
8+
9+
public DefaultJsonApiApplicationBuilderEvents(IJsonApiOptions options)
10+
{
11+
ArgumentGuard.NotNull(options);
12+
13+
_options = options;
14+
}
15+
16+
public void ResourceGraphBuilt(IResourceGraph resourceGraph)
17+
{
18+
_options.SerializerOptions.Converters.Add(new ResourceObjectConverter(resourceGraph));
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace JsonApiDotNetCore.Configuration;
2+
3+
internal interface IJsonApiApplicationBuilderEvents
4+
{
5+
void ResourceGraphBuilt(IResourceGraph resourceGraph);
6+
}

src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using JsonApiDotNetCore.QueryStrings;
88
using JsonApiDotNetCore.Repositories;
99
using JsonApiDotNetCore.Resources;
10-
using JsonApiDotNetCore.Serialization.JsonConverters;
1110
using JsonApiDotNetCore.Serialization.Request;
1211
using JsonApiDotNetCore.Serialization.Request.Adapters;
1312
using JsonApiDotNetCore.Serialization.Response;
@@ -74,6 +73,8 @@ public void ConfigureResourceGraph(ICollection<Type> dbContextTypes, Action<Reso
7473
_services.TryAddSingleton(serviceProvider =>
7574
{
7675
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
76+
var events = serviceProvider.GetRequiredService<IJsonApiApplicationBuilderEvents>();
77+
7778
var resourceGraphBuilder = new ResourceGraphBuilder(_options, loggerFactory);
7879

7980
var scanner = new ResourcesAssemblyScanner(_assemblyCache, resourceGraphBuilder);
@@ -93,8 +94,7 @@ public void ConfigureResourceGraph(ICollection<Type> dbContextTypes, Action<Reso
9394
configureResourceGraph?.Invoke(resourceGraphBuilder);
9495

9596
IResourceGraph resourceGraph = resourceGraphBuilder.Build();
96-
97-
_options.SerializerOptions.Converters.Add(new ResourceObjectConverter(resourceGraph));
97+
events.ResourceGraphBuilt(resourceGraph);
9898

9999
return resourceGraph;
100100
});
@@ -169,6 +169,7 @@ public void ConfigureServiceContainer(ICollection<Type> dbContextTypes)
169169
_services.TryAddScoped<IQueryLayerComposer, QueryLayerComposer>();
170170
_services.TryAddScoped<IInverseNavigationResolver, InverseNavigationResolver>();
171171
_services.TryAddSingleton<IDocumentDescriptionLinkProvider, NoDocumentDescriptionLinkProvider>();
172+
_services.TryAddSingleton<IJsonApiApplicationBuilderEvents, DefaultJsonApiApplicationBuilderEvents>();
172173
}
173174

174175
private void AddMiddlewareLayer()

0 commit comments

Comments
 (0)