1+ using System . Reflection ;
12using JsonApiDotNetCore . Configuration ;
23using Microsoft . Extensions . DependencyInjection ;
34
@@ -20,66 +21,38 @@ public void Dispose()
2021
2122 private sealed class JsonApiOptionsScope : IDisposable
2223 {
24+ private static readonly List < PropertyInfo > PropertyCache = typeof ( JsonApiOptions ) . GetProperties ( ) . Where ( IsAccessibleProperty ) . ToList ( ) ;
25+
2326 private readonly JsonApiOptions _options ;
2427 private readonly JsonApiOptions _backupValues ;
2528
26- public JsonApiOptionsScope ( IJsonApiOptions options )
29+ public JsonApiOptionsScope ( JsonApiOptions options )
2730 {
28- _options = ( JsonApiOptions ) options ;
31+ _options = options ;
32+ _backupValues = new JsonApiOptions ( ) ;
2933
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 ;
5640 }
5741
5842 public void Dispose ( )
5943 {
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+ }
8356 }
8457 }
8558}
0 commit comments