Skip to content

Commit ed91e1c

Browse files
author
Bart Koelman
committed
For convenience, expose the resource context that matches TResource in JsonApiResourceDefinition.
1 parent 786cc9a commit ed91e1c

File tree

4 files changed

+11
-11
lines changed

4 files changed

+11
-11
lines changed

src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,17 @@ public class JsonApiResourceDefinition<TResource, TId> : IResourceDefinition<TRe
3737
{
3838
protected IResourceGraph ResourceGraph { get; }
3939

40+
/// <summary>
41+
/// Provides metadata for the resource type <typeparamref name="TResource" />.
42+
/// </summary>
43+
protected ResourceContext ResourceContext { get; }
44+
4045
public JsonApiResourceDefinition(IResourceGraph resourceGraph)
4146
{
4247
ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph));
4348

4449
ResourceGraph = resourceGraph;
50+
ResourceContext = resourceGraph.GetResourceContext<TResource>();
4551
}
4652

4753
/// <inheritdoc />

test/JsonApiDotNetCoreExampleTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ public sealed class TelevisionBroadcastDefinition : JsonApiResourceDefinition<Te
2424
private readonly TelevisionDbContext _dbContext;
2525
private readonly IJsonApiRequest _request;
2626
private readonly IEnumerable<IQueryConstraintProvider> _constraintProviders;
27-
private readonly ResourceContext _broadcastContext;
2827

2928
private DateTimeOffset? _storedArchivedAt;
3029

@@ -35,7 +34,6 @@ public TelevisionBroadcastDefinition(IResourceGraph resourceGraph, TelevisionDbC
3534
_dbContext = dbContext;
3635
_request = request;
3736
_constraintProviders = constraintProviders;
38-
_broadcastContext = resourceGraph.GetResourceContext<TelevisionBroadcast>();
3937
}
4038

4139
public override FilterExpression OnApplyFilter(FilterExpression existingFilter)
@@ -46,8 +44,7 @@ public override FilterExpression OnApplyFilter(FilterExpression existingFilter)
4644

4745
if (IsReturningCollectionOfTelevisionBroadcasts() && !HasFilterOnArchivedAt(existingFilter))
4846
{
49-
AttrAttribute archivedAtAttribute =
50-
_broadcastContext.Attributes.Single(attr => attr.Property.Name == nameof(TelevisionBroadcast.ArchivedAt));
47+
AttrAttribute archivedAtAttribute = ResourceContext.Attributes.Single(attr => attr.Property.Name == nameof(TelevisionBroadcast.ArchivedAt));
5148

5249
var archivedAtChain = new ResourceFieldChainExpression(archivedAtAttribute);
5350

@@ -71,7 +68,7 @@ private bool IsRequestingCollectionOfTelevisionBroadcasts()
7168
{
7269
if (_request.IsCollection)
7370
{
74-
if (_request.PrimaryResource == _broadcastContext || _request.SecondaryResource == _broadcastContext)
71+
if (_request.PrimaryResource == ResourceContext || _request.SecondaryResource == ResourceContext)
7572
{
7673
return true;
7774
}
@@ -97,7 +94,7 @@ private bool IsIncludingCollectionOfTelevisionBroadcasts()
9794

9895
foreach (IncludeElementExpression includeElement in includeElements)
9996
{
100-
if (includeElement.Relationship is HasManyAttribute && includeElement.Relationship.RightType == _broadcastContext.ResourceType)
97+
if (includeElement.Relationship is HasManyAttribute && includeElement.Relationship.RightType == ResourceContext.ResourceType)
10198
{
10299
return true;
103100
}

test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceDefinitions/Reading/MoonDefinition.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,8 @@ public override IReadOnlyCollection<IncludeElementExpression> OnApplyIncludes(IR
3535
return existingIncludes;
3636
}
3737

38-
ResourceContext resourceContext = ResourceGraph.GetResourceContext<Moon>();
39-
4038
RelationshipAttribute orbitsAroundRelationship =
41-
resourceContext.Relationships.Single(relationship => relationship.Property.Name == nameof(Moon.OrbitsAround));
39+
ResourceContext.Relationships.Single(relationship => relationship.Property.Name == nameof(Moon.OrbitsAround));
4240

4341
return new List<IncludeElementExpression>(existingIncludes)
4442
{

test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ public override FilterExpression OnApplyFilter(FilterExpression existingFilter)
5050

5151
if (_clientSettingsProvider.ArePlanetsWithPrivateNameHidden)
5252
{
53-
ResourceContext resourceContext = ResourceGraph.GetResourceContext<Planet>();
54-
AttrAttribute privateNameAttribute = resourceContext.Attributes.Single(attribute => attribute.Property.Name == nameof(Planet.PrivateName));
53+
AttrAttribute privateNameAttribute = ResourceContext.Attributes.Single(attribute => attribute.Property.Name == nameof(Planet.PrivateName));
5554

5655
FilterExpression hasNoPrivateName = new ComparisonExpression(ComparisonOperator.Equals, new ResourceFieldChainExpression(privateNameAttribute),
5756
new NullConstantExpression());

0 commit comments

Comments
 (0)