diff --git a/src/System.Linq.Dynamic.Core/CustomTypeProviders/DynamicLinqTypeAttribute.cs b/src/System.Linq.Dynamic.Core/CustomTypeProviders/DynamicLinqTypeAttribute.cs
index 5db6901c..13fc23d2 100644
--- a/src/System.Linq.Dynamic.Core/CustomTypeProviders/DynamicLinqTypeAttribute.cs
+++ b/src/System.Linq.Dynamic.Core/CustomTypeProviders/DynamicLinqTypeAttribute.cs
@@ -1,10 +1,9 @@
-namespace System.Linq.Dynamic.Core.CustomTypeProviders
+namespace System.Linq.Dynamic.Core.CustomTypeProviders;
+
+///
+/// Indicates to Dynamic Linq to consider the Type as a valid dynamic linq type.
+///
+[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Struct | AttributeTargets.Enum, AllowMultiple = false, Inherited = false)]
+public sealed class DynamicLinqTypeAttribute : Attribute
{
- ///
- /// Indicates to Dynamic Linq to consider the Type as a valid dynamic linq type.
- ///
- [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, AllowMultiple = false, Inherited = false)]
- public sealed class DynamicLinqTypeAttribute : Attribute
- {
- }
-}
+}
\ No newline at end of file
diff --git a/test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs b/test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs
index acf8748e..a6a81772 100644
--- a/test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs
+++ b/test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs
@@ -88,6 +88,17 @@ public class CustomClassWithMethodWithDynamicLinqTypeAttribute
public int GetAge(int x) => x;
}
+ [DynamicLinqType]
+ public interface ICustomInterfaceWithMethodWithDynamicLinqTypeAttribute
+ {
+ int GetAge(int x);
+ }
+
+ public class CustomClassImplementingInterface : ICustomInterfaceWithMethodWithDynamicLinqTypeAttribute
+ {
+ public int GetAge(int x) => x;
+ }
+
[DynamicLinqType]
public class CustomClassWithStaticMethodWithDynamicLinqTypeAttribute
{
@@ -1057,7 +1068,7 @@ public void DynamicExpressionParser_ParseLambda_CustomStaticMethod_WhenClassHasD
// Act
var lambdaExpression = DynamicExpressionParser.ParseLambda(typeof(CustomClassWithStaticMethodWithDynamicLinqTypeAttribute), null, expression);
var del = lambdaExpression.Compile();
- var result = (int)del.DynamicInvoke(context);
+ var result = (int?)del.DynamicInvoke(context);
// Assert
Check.That(result).IsEqualTo(10);
@@ -1073,12 +1084,28 @@ public void DynamicExpressionParser_ParseLambda_CustomMethod_WhenClassHasDynamic
// Act
var lambdaExpression = DynamicExpressionParser.ParseLambda(typeof(CustomClassWithMethodWithDynamicLinqTypeAttribute), null, expression);
var del = lambdaExpression.Compile();
- var result = (int)del.DynamicInvoke(context);
+ var result = (int?)del.DynamicInvoke(context);
// Assert
Check.That(result).IsEqualTo(10);
}
+ [Fact]
+ public void DynamicExpressionParser_ParseLambda_CustomInterface_WhenInterfaceHasDynamicLinqTypeAttribute_ShouldWorkCorrect()
+ {
+ // Arrange
+ var context = new CustomClassImplementingInterface();
+ var expression = $"{nameof(ICustomInterfaceWithMethodWithDynamicLinqTypeAttribute.GetAge)}(10)";
+
+ // Act
+ var lambdaExpression = DynamicExpressionParser.ParseLambda(typeof(ICustomInterfaceWithMethodWithDynamicLinqTypeAttribute), null, expression);
+ var del = lambdaExpression.Compile();
+ var result = (int?)del.DynamicInvoke(context);
+
+ // Assert
+ result.Should().Be(10);
+ }
+
[Fact]
public void DynamicExpressionParser_ParseLambda_CustomMethod_WhenClassDoesNotHaveDynamicLinqTypeAttribute_ShouldThrowException()
{