forked from JSONAPIdotNET/JSONAPI.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsonApiConfiguration.cs
More file actions
108 lines (96 loc) · 3.9 KB
/
Copy pathJsonApiConfiguration.cs
File metadata and controls
108 lines (96 loc) · 3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using System;
using System.Collections.Generic;
using JSONAPI.Core;
using JSONAPI.Documents;
using JSONAPI.Http;
namespace JSONAPI.Configuration
{
/// <summary>
/// Base class for JSON API configuration services
/// </summary>
public class JsonApiConfiguration : IJsonApiConfiguration
{
private readonly IResourceTypeRegistrar _resourceTypeRegistrar;
public ILinkConventions LinkConventions { get; private set; }
public IEnumerable<IResourceTypeConfiguration> ResourceTypeConfigurations { get { return _resourceTypeConfigurations; } }
private readonly IList<IResourceTypeConfiguration> _resourceTypeConfigurations;
/// <summary>
/// Creates a new JsonApiConfiguration
/// </summary>
public JsonApiConfiguration()
: this(new PluralizationService())
{
}
/// <summary>
/// Creates a new JsonApiConfiguration
/// </summary>
public JsonApiConfiguration(IPluralizationService pluralizationService)
: this(new DefaultNamingConventions(pluralizationService))
{
}
/// <summary>
/// Creates a new JsonApiConfiguration
/// </summary>
public JsonApiConfiguration(INamingConventions namingConventions)
: this(new ResourceTypeRegistrar(namingConventions))
{
}
/// <summary>
/// Creates a new JsonApiConfiguration
/// </summary>
public JsonApiConfiguration(IResourceTypeRegistrar resourceTypeRegistrar)
{
_resourceTypeRegistrar = resourceTypeRegistrar;
if (resourceTypeRegistrar == null) throw new ArgumentNullException("resourceTypeRegistrar");
_resourceTypeConfigurations = new List<IResourceTypeConfiguration>();
LinkConventions = new DefaultLinkConventions();
}
/// <summary>
/// Registers a resource type with the configuration
/// </summary>
public void RegisterResourceType<TResourceType>(Action<IResourceTypeConfigurator<TResourceType>> configurationAction = null)
{
var configuration = new ResourceTypeConfiguration<TResourceType>(_resourceTypeRegistrar);
if (configurationAction != null)
configurationAction(configuration);
_resourceTypeConfigurations.Add(configuration);
}
/// <summary>
/// Registers an entity type/resource type pair for use with MappedDocumentMaterializer />
/// </summary>
public void RegisterMappedType<TEntity, TResourceType, TMaterializer>(Action<IResourceTypeConfigurator<TResourceType>> configurationAction = null)
where TMaterializer : MappedDocumentMaterializer<TEntity, TResourceType>
where TResourceType : class
{
RegisterResourceType<TResourceType>(c =>
{
c.UseDocumentMaterializer<TMaterializer>();
if (configurationAction != null)
configurationAction(c);
});
}
/// <summary>
/// Allows overriding how links will be formatted.
/// </summary>
/// <param name="linkConventions"></param>
public void OverrideLinkConventions(ILinkConventions linkConventions)
{
LinkConventions = linkConventions;
}
}
/// <summary>
/// Configuration interface for JSON API
/// </summary>
public interface IJsonApiConfiguration
{
/// <summary>
/// Conventions for serializing links with resource objects
/// </summary>
ILinkConventions LinkConventions { get; }
/// <summary>
/// A set of resource type configurations. These configurations will be converted into IResourceTypeRegistrations
/// by the ResourceTypeRegistrar
/// </summary>
IEnumerable<IResourceTypeConfiguration> ResourceTypeConfigurations { get; }
}
}