11using System ;
22using System . Collections . Generic ;
3- using System . Web . Http ;
4- using Autofac ;
5- using JSONAPI . ActionFilters ;
3+ using Autofac . Core ;
64using JSONAPI . Core ;
7- using JSONAPI . Json ;
85using JSONAPI . Payload ;
9- using JSONAPI . Payload . Builders ;
106
117namespace JSONAPI . Autofac
128{
139 public class JsonApiAutofacConfiguration
1410 {
1511 private readonly INamingConventions _namingConventions ;
1612 private readonly List < Type > _typesToRegister ;
17- private readonly List < Action < ContainerBuilder > > _containerBuildingActions ;
1813 private ILinkConventions _linkConventions ;
1914
2015 public JsonApiAutofacConfiguration ( INamingConventions namingConventions )
@@ -23,7 +18,6 @@ public JsonApiAutofacConfiguration(INamingConventions namingConventions)
2318
2419 _namingConventions = namingConventions ;
2520 _typesToRegister = new List < Type > ( ) ;
26- _containerBuildingActions = new List < Action < ContainerBuilder > > ( ) ;
2721 }
2822
2923 public void RegisterResourceType ( Type resourceType )
@@ -36,71 +30,9 @@ public void OverrideLinkConventions(ILinkConventions linkConventions)
3630 _linkConventions = linkConventions ;
3731 }
3832
39- public void OnContainerBuilding ( Action < ContainerBuilder > action )
33+ public IModule GetAutofacModule ( )
4034 {
41- _containerBuildingActions . Add ( action ) ;
42- }
43-
44- public IContainer Apply ( HttpConfiguration httpConfig )
45- {
46- var container = GetContainer ( ) ;
47- var jsonApiConfiguration = container . Resolve < JsonApiHttpConfiguration > ( ) ;
48- jsonApiConfiguration . Apply ( httpConfig ) ;
49- return container ;
50- }
51-
52- private IContainer GetContainer ( )
53- {
54- var builder = new ContainerBuilder ( ) ;
55-
56- // Registry
57- builder . Register ( c => _namingConventions ) . As < INamingConventions > ( ) . SingleInstance ( ) ;
58- builder . RegisterType < ResourceTypeRegistry > ( ) . AsSelf ( ) . SingleInstance ( ) ;
59- builder . Register ( c =>
60- {
61- var registry = c . Resolve < ResourceTypeRegistry > ( ) ;
62- foreach ( var type in _typesToRegister )
63- registry . RegisterResourceType ( type ) ;
64- return registry ;
65- } ) . As < IResourceTypeRegistry > ( ) . SingleInstance ( ) ;
66-
67- // Serialization
68- builder . RegisterType < MetadataSerializer > ( ) . As < IMetadataSerializer > ( ) . SingleInstance ( ) ;
69- builder . RegisterType < LinkSerializer > ( ) . As < ILinkSerializer > ( ) . SingleInstance ( ) ;
70- builder . RegisterType < ResourceLinkageSerializer > ( ) . As < IResourceLinkageSerializer > ( ) . SingleInstance ( ) ;
71- builder . RegisterType < RelationshipObjectSerializer > ( ) . As < IRelationshipObjectSerializer > ( ) . SingleInstance ( ) ;
72- builder . RegisterType < ResourceObjectSerializer > ( ) . As < IResourceObjectSerializer > ( ) . SingleInstance ( ) ;
73- builder . RegisterType < SingleResourcePayloadSerializer > ( ) . As < ISingleResourcePayloadSerializer > ( ) . SingleInstance ( ) ;
74- builder . RegisterType < ResourceCollectionPayloadSerializer > ( ) . As < IResourceCollectionPayloadSerializer > ( ) . SingleInstance ( ) ;
75- builder . RegisterType < ErrorSerializer > ( ) . As < IErrorSerializer > ( ) . SingleInstance ( ) ;
76- builder . RegisterType < ErrorPayloadSerializer > ( ) . As < IErrorPayloadSerializer > ( ) . SingleInstance ( ) ;
77-
78- // Queryable transforms
79- builder . RegisterType < SynchronousEnumerationTransformer > ( ) . As < IQueryableEnumerationTransformer > ( ) . SingleInstance ( ) ;
80- builder . RegisterType < DefaultFilteringTransformer > ( ) . As < IQueryableFilteringTransformer > ( ) . SingleInstance ( ) ;
81- builder . RegisterType < DefaultSortingTransformer > ( ) . As < IQueryableSortingTransformer > ( ) . SingleInstance ( ) ;
82- builder . RegisterType < DefaultPaginationTransformer > ( ) . As < IQueryablePaginationTransformer > ( ) . SingleInstance ( ) ;
83-
84- // Payload building
85- var linkConventions = _linkConventions ?? new DefaultLinkConventions ( ) ;
86- builder . Register ( c => linkConventions ) . As < ILinkConventions > ( ) . SingleInstance ( ) ;
87- builder . RegisterType < JsonApiFormatter > ( ) . SingleInstance ( ) ;
88- builder . RegisterType < RegistryDrivenResourceCollectionPayloadBuilder > ( ) . As < IResourceCollectionPayloadBuilder > ( ) . SingleInstance ( ) ;
89- builder . RegisterType < RegistryDrivenSingleResourcePayloadBuilder > ( ) . As < ISingleResourcePayloadBuilder > ( ) . SingleInstance ( ) ;
90- builder . RegisterType < FallbackPayloadBuilder > ( ) . As < IFallbackPayloadBuilder > ( ) . SingleInstance ( ) ;
91- builder . RegisterType < ErrorPayloadBuilder > ( ) . As < IErrorPayloadBuilder > ( ) . SingleInstance ( ) ;
92- builder . RegisterType < FallbackPayloadBuilderAttribute > ( ) . SingleInstance ( ) ;
93- builder . RegisterType < JsonApiExceptionFilterAttribute > ( ) . SingleInstance ( ) ;
94- builder . RegisterType < DefaultQueryableResourceCollectionPayloadBuilder > ( ) . As < IQueryableResourceCollectionPayloadBuilder > ( ) ;
95-
96- builder . RegisterType < JsonApiHttpConfiguration > ( ) ;
97-
98- foreach ( var containerBuildingAction in _containerBuildingActions )
99- {
100- containerBuildingAction ( builder ) ;
101- }
102-
103- return builder . Build ( ) ;
35+ return new JsonApiAutofacModule ( _namingConventions , _linkConventions , _typesToRegister ) ;
10436 }
10537 }
10638}
0 commit comments