@@ -14,14 +14,8 @@ namespace JSONAPI.Core
1414 /// </summary>
1515 public class JsonApiConfiguration
1616 {
17- private bool _enableFiltering ;
18- private bool _enableSorting ;
19- private bool _enablePagination ;
20- private IQueryableFilteringTransformer _filteringTransformer ;
21- private IQueryableSortingTransformer _sortingTransformer ;
22- private IQueryablePaginationTransformer _paginationTransformer ;
23- private IQueryableEnumerationTransformer _enumerationTransformer ;
2417 private readonly IModelManager _modelManager ;
18+ private Func < IQueryablePayloadBuilder > _payloadBuilderFactory ;
2519
2620 /// <summary>
2721 /// Creates a new configuration
@@ -30,87 +24,23 @@ public JsonApiConfiguration(IModelManager modelManager)
3024 {
3125 if ( modelManager == null ) throw new Exception ( "You must provide " ) ;
3226
33- _enableFiltering = true ;
34- _enableSorting = true ;
35- _enablePagination = true ;
36- _filteringTransformer = null ;
37- _sortingTransformer = null ;
38- _paginationTransformer = null ;
39- _enumerationTransformer = null ;
4027 _modelManager = modelManager ;
28+ _payloadBuilderFactory = ( ) => new DefaultQueryablePayloadBuilderConfiguration ( ) . GetBuilder ( modelManager ) ;
4129 }
4230
4331 /// <summary>
44- /// Disables filtering of IQueryables in GET methods
32+ /// Allows configuring the default queryable payload builder
4533 /// </summary>
34+ /// <param name="configurationAction">Provides access to a fluent DefaultQueryablePayloadBuilderConfiguration object</param>
4635 /// <returns>The same configuration object the method was called on.</returns>
47- public JsonApiConfiguration DisableFiltering ( )
36+ public JsonApiConfiguration UsingDefaultQueryablePayloadBuilder ( Action < DefaultQueryablePayloadBuilderConfiguration > configurationAction )
4837 {
49- _enableFiltering = false ;
50- return this ;
51- }
52-
53- /// <summary>
54- /// Disables sorting of IQueryables in GET methods
55- /// </summary>
56- /// <returns>The same configuration object the method was called on.</returns>
57- public JsonApiConfiguration DisableSorting ( )
58- {
59- _enableSorting = false ;
60- return this ;
61- }
62-
63- /// <summary>
64- /// Disables pagination of IQueryables in GET methods
65- /// </summary>
66- /// <returns>The same configuration object the method was called on.</returns>
67- public JsonApiConfiguration DisablePagination ( )
68- {
69- _enablePagination = false ;
70- return this ;
71- }
72-
73- /// <summary>
74- /// Specifies a filtering transformer to use for filtering IQueryable response payloads.
75- /// </summary>
76- /// <param name="filteringTransformer">The filtering transformer.</param>
77- /// <returns>The same configuration object the method was called on.</returns>
78- public JsonApiConfiguration FilterWith ( IQueryableFilteringTransformer filteringTransformer )
79- {
80- _filteringTransformer = filteringTransformer ;
81- return this ;
82- }
83-
84- /// <summary>
85- /// Specifies a sorting transformer to use for sorting IQueryable response payloads.
86- /// </summary>
87- /// <param name="sortingTransformer">The sorting transformer.</param>
88- /// <returns>The same configuration object the method was called on.</returns>
89- public JsonApiConfiguration SortWith ( IQueryableSortingTransformer sortingTransformer )
90- {
91- _sortingTransformer = sortingTransformer ;
92- return this ;
93- }
94-
95- /// <summary>
96- /// Specifies a pagination transformer to use for paging IQueryable response payloads.
97- /// </summary>
98- /// <param name="paginationTransformer">The pagination transformer.</param>
99- /// <returns>The same configuration object the method was called on.</returns>
100- public JsonApiConfiguration PageWith ( IQueryablePaginationTransformer paginationTransformer )
101- {
102- _paginationTransformer = paginationTransformer ;
103- return this ;
104- }
105-
106- /// <summary>
107- /// Specifies an enumeration transformer to use for enumerating IQueryable response payloads.
108- /// </summary>
109- /// <param name="enumerationTransformer">The enumeration transformer.</param>
110- /// <returns>The same configuration object the method was called on.</returns>
111- public JsonApiConfiguration EnumerateQueriesWith ( IQueryableEnumerationTransformer enumerationTransformer )
112- {
113- _enumerationTransformer = enumerationTransformer ;
38+ _payloadBuilderFactory = ( ) =>
39+ {
40+ var configuration = new DefaultQueryablePayloadBuilderConfiguration ( ) ;
41+ configurationAction ( configuration ) ;
42+ return configuration . GetBuilder ( _modelManager ) ;
43+ } ;
11444 return this ;
11545 }
11646
@@ -120,28 +50,12 @@ public JsonApiConfiguration EnumerateQueriesWith(IQueryableEnumerationTransforme
12050 /// <param name="httpConfig">The HttpConfiguration to apply this JsonApiConfiguration to</param>
12151 public void Apply ( HttpConfiguration httpConfig )
12252 {
123- IQueryableFilteringTransformer filteringTransformer = null ;
124- if ( _enableFiltering )
125- filteringTransformer = _filteringTransformer ?? new DefaultFilteringTransformer ( _modelManager ) ;
126-
127- IQueryableSortingTransformer sortingTransformer = null ;
128- if ( _enableSorting )
129- sortingTransformer = _sortingTransformer ?? new DefaultSortingTransformer ( _modelManager ) ;
130-
131- IQueryablePaginationTransformer paginationTransformer = null ;
132- if ( _enablePagination )
133- paginationTransformer =
134- _paginationTransformer ?? new DefaultPaginationTransformer ( "page.number" , "page.size" , null ) ;
135-
136- IQueryableEnumerationTransformer enumerationTransformer =
137- _enumerationTransformer ?? new SynchronousEnumerationTransformer ( ) ;
138-
13953 var formatter = new JsonApiFormatter ( _modelManager ) ;
14054
14155 httpConfig . Formatters . Clear ( ) ;
14256 httpConfig . Formatters . Add ( formatter ) ;
14357
144- var queryablePayloadBuilder = new DefaultQueryablePayloadBuilder ( enumerationTransformer , filteringTransformer , sortingTransformer , paginationTransformer ) ;
58+ var queryablePayloadBuilder = _payloadBuilderFactory ( ) ;
14559 httpConfig . Filters . Add ( new JsonApiQueryableAttribute ( queryablePayloadBuilder ) ) ;
14660
14761 httpConfig . Services . Replace ( typeof ( IHttpControllerSelector ) ,
0 commit comments