Skip to content

Commit 9323342

Browse files
committed
fix: support for lazy loading proxies
1 parent 9d7614f commit 9323342

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/JsonApiDotNetCore/Internal/ResourceGraph.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public ResourceContext GetResourceContext(string resourceName)
2626
=> Resources.SingleOrDefault(e => e.ResourceName == resourceName);
2727
/// <inheritdoc />
2828
public ResourceContext GetResourceContext(Type resourceType)
29-
=> Resources.SingleOrDefault(e => e.ResourceType == resourceType);
29+
=> Resources.SingleOrDefault(e => e.ResourceType == resourceType) ?? Resources.SingleOrDefault(e => e.ResourceType.IsAssignableFrom(resourceType));
3030
/// <inheritdoc />
3131
public ResourceContext GetResourceContext<TResource>() where TResource : class, IIdentifiable
3232
=> GetResourceContext(typeof(TResource));

test/UnitTests/Internal/ResourceGraphBuilder_Tests.cs

+38
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
using System;
12
using JsonApiDotNetCore.Builders;
23
using JsonApiDotNetCore.Configuration;
34
using JsonApiDotNetCore.Internal;
5+
using JsonApiDotNetCore.Models;
46
using Microsoft.EntityFrameworkCore;
57
using Microsoft.Extensions.Logging;
68
using Microsoft.Extensions.Logging.Abstractions;
@@ -41,12 +43,48 @@ public void Adding_DbContext_Members_That_Do_Not_Implement_IIdentifiable_Logs_Wa
4143
Assert.Equal("Entity 'UnitTests.Internal.ResourceGraphBuilder_Tests+TestContext' does not implement 'IIdentifiable'.", loggerFactory.Logger.Messages[0].Text);
4244
}
4345

46+
[Fact]
47+
public void GetResourceContext_Yields_Right_Type_For_Proxy()
48+
{
49+
// Arrange
50+
var resourceGraphBuilder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance);
51+
resourceGraphBuilder.AddResource<Bar>();
52+
var resourceGraph = (ResourceGraph)resourceGraphBuilder.Build();
53+
54+
// Act
55+
var result = resourceGraph.GetResourceContext(typeof(DummyProxy));
56+
57+
// Assert
58+
Assert.Equal(typeof(Bar), result.ResourceType);
59+
}
60+
61+
[Fact]
62+
public void GetResourceContext_Yields_Right_Type_For_IIdentifiable()
63+
{
64+
// Arrange
65+
var resourceGraphBuilder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance);
66+
resourceGraphBuilder.AddResource<Bar>();
67+
var resourceGraph = (ResourceGraph)resourceGraphBuilder.Build();
68+
69+
// Act
70+
var result = resourceGraph.GetResourceContext(typeof(Bar));
71+
72+
// Assert
73+
Assert.Equal(typeof(Bar), result.ResourceType);
74+
}
75+
4476
private class Foo { }
4577

4678
private class TestContext : DbContext
4779
{
4880
public DbSet<Foo> Foos { get; set; }
4981
}
82+
83+
private class Bar : Identifiable { }
84+
85+
// Used to simulate a lazy loading proxy
86+
private class DummyProxy : Bar { }
87+
5088
}
5189

5290
}

0 commit comments

Comments
 (0)