1
+ using System . Reflection ;
1
2
using JsonApiDotNetCore . Configuration ;
2
3
using Microsoft . Extensions . DependencyInjection ;
3
4
@@ -20,66 +21,38 @@ public void Dispose()
20
21
21
22
private sealed class JsonApiOptionsScope : IDisposable
22
23
{
24
+ private static readonly List < PropertyInfo > PropertyCache = typeof ( JsonApiOptions ) . GetProperties ( ) . Where ( IsAccessibleProperty ) . ToList ( ) ;
25
+
23
26
private readonly JsonApiOptions _options ;
24
27
private readonly JsonApiOptions _backupValues ;
25
28
26
- public JsonApiOptionsScope ( IJsonApiOptions options )
29
+ public JsonApiOptionsScope ( JsonApiOptions options )
27
30
{
28
- _options = ( JsonApiOptions ) options ;
31
+ _options = options ;
32
+ _backupValues = new JsonApiOptions ( ) ;
29
33
30
- _backupValues = new JsonApiOptions
31
- {
32
- Namespace = options . Namespace ,
33
- DefaultAttrCapabilities = options . DefaultAttrCapabilities ,
34
- DefaultHasOneCapabilities = options . DefaultHasOneCapabilities ,
35
- DefaultHasManyCapabilities = options . DefaultHasManyCapabilities ,
36
- IncludeJsonApiVersion = options . IncludeJsonApiVersion ,
37
- IncludeExceptionStackTraceInErrors = options . IncludeExceptionStackTraceInErrors ,
38
- IncludeRequestBodyInErrors = options . IncludeRequestBodyInErrors ,
39
- UseRelativeLinks = options . UseRelativeLinks ,
40
- TopLevelLinks = options . TopLevelLinks ,
41
- ResourceLinks = options . ResourceLinks ,
42
- RelationshipLinks = options . RelationshipLinks ,
43
- IncludeTotalResourceCount = options . IncludeTotalResourceCount ,
44
- DefaultPageSize = options . DefaultPageSize ,
45
- MaximumPageSize = options . MaximumPageSize ,
46
- MaximumPageNumber = options . MaximumPageNumber ,
47
- ValidateModelState = options . ValidateModelState ,
48
- ClientIdGeneration = options . ClientIdGeneration ,
49
- AllowUnknownQueryStringParameters = options . AllowUnknownQueryStringParameters ,
50
- AllowUnknownFieldsInRequestBody = options . AllowUnknownFieldsInRequestBody ,
51
- EnableLegacyFilterNotation = options . EnableLegacyFilterNotation ,
52
- MaximumIncludeDepth = options . MaximumIncludeDepth ,
53
- MaximumOperationsPerRequest = options . MaximumOperationsPerRequest ,
54
- TransactionIsolationLevel = options . TransactionIsolationLevel
55
- } ;
34
+ CopyPropertyValues ( _options , _backupValues ) ;
35
+ }
36
+
37
+ private static bool IsAccessibleProperty ( PropertyInfo property )
38
+ {
39
+ return property . GetMethod != null && property . SetMethod != null && property . GetCustomAttribute < ObsoleteAttribute > ( ) == null ;
56
40
}
57
41
58
42
public void Dispose ( )
59
43
{
60
- _options . Namespace = _backupValues . Namespace ;
61
- _options . DefaultAttrCapabilities = _backupValues . DefaultAttrCapabilities ;
62
- _options . DefaultHasOneCapabilities = _backupValues . DefaultHasOneCapabilities ;
63
- _options . DefaultHasManyCapabilities = _backupValues . DefaultHasManyCapabilities ;
64
- _options . IncludeJsonApiVersion = _backupValues . IncludeJsonApiVersion ;
65
- _options . IncludeExceptionStackTraceInErrors = _backupValues . IncludeExceptionStackTraceInErrors ;
66
- _options . IncludeRequestBodyInErrors = _backupValues . IncludeRequestBodyInErrors ;
67
- _options . UseRelativeLinks = _backupValues . UseRelativeLinks ;
68
- _options . TopLevelLinks = _backupValues . TopLevelLinks ;
69
- _options . ResourceLinks = _backupValues . ResourceLinks ;
70
- _options . RelationshipLinks = _backupValues . RelationshipLinks ;
71
- _options . IncludeTotalResourceCount = _backupValues . IncludeTotalResourceCount ;
72
- _options . DefaultPageSize = _backupValues . DefaultPageSize ;
73
- _options . MaximumPageSize = _backupValues . MaximumPageSize ;
74
- _options . MaximumPageNumber = _backupValues . MaximumPageNumber ;
75
- _options . ValidateModelState = _backupValues . ValidateModelState ;
76
- _options . ClientIdGeneration = _backupValues . ClientIdGeneration ;
77
- _options . AllowUnknownQueryStringParameters = _backupValues . AllowUnknownQueryStringParameters ;
78
- _options . AllowUnknownFieldsInRequestBody = _backupValues . AllowUnknownFieldsInRequestBody ;
79
- _options . EnableLegacyFilterNotation = _backupValues . EnableLegacyFilterNotation ;
80
- _options . MaximumIncludeDepth = _backupValues . MaximumIncludeDepth ;
81
- _options . MaximumOperationsPerRequest = _backupValues . MaximumOperationsPerRequest ;
82
- _options . TransactionIsolationLevel = _backupValues . TransactionIsolationLevel ;
44
+ CopyPropertyValues ( _backupValues , _options ) ;
45
+ }
46
+
47
+ private static void CopyPropertyValues ( JsonApiOptions source , JsonApiOptions destination )
48
+ {
49
+ foreach ( PropertyInfo property in PropertyCache )
50
+ {
51
+ property . SetMethod ! . Invoke ( destination , new [ ]
52
+ {
53
+ property . GetMethod ! . Invoke ( source , null )
54
+ } ) ;
55
+ }
83
56
}
84
57
}
85
58
}
0 commit comments