Skip to content

Commit c2eaa23

Browse files
author
Chris Santero
committed
sanitize configuration interfaces slightly
1 parent 68dfca7 commit c2eaa23

9 files changed

Lines changed: 66 additions & 30 deletions

JSONAPI.Autofac/JsonApiAutofacModule.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ protected override void Load(ContainerBuilder builder)
4141

4242
foreach (var relationshipConfiguration in resourceTypeConfiguration.RelationshipConfigurations)
4343
{
44-
var prop = relationshipConfiguration.Key;
4544
var relationship = relationshipConfiguration.Value;
4645
builder.RegisterType(relationship.MaterializerType);
4746
}

JSONAPI/Configuration/IResourceTypeConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace JSONAPI.Configuration
88
{
99
/// <summary>
10-
/// Configuration mechanism for resource types
10+
/// Results of configuring a resource type
1111
/// </summary>
1212
public interface IResourceTypeConfiguration
1313
{
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using System.Linq.Expressions;
3+
using JSONAPI.Http;
4+
5+
namespace JSONAPI.Configuration
6+
{
7+
/// <summary>
8+
/// Configuration mechanism for resource types
9+
/// </summary>
10+
public interface IResourceTypeConfigurator<TResourceType>
11+
{
12+
/// <summary>
13+
/// Configures the relationship corresponding to the specified property
14+
/// </summary>
15+
void ConfigureRelationship(Expression<Func<TResourceType, object>> property,
16+
Action<IResourceTypeRelationshipConfigurator> configurationAction);
17+
18+
/// <summary>
19+
/// Specifies the materializer to use for this resource type
20+
/// </summary>
21+
/// <typeparam name="TMaterializer"></typeparam>
22+
void UseDocumentMaterializer<TMaterializer>() where TMaterializer : IDocumentMaterializer;
23+
}
24+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using JSONAPI.Http;
3+
4+
namespace JSONAPI.Configuration
5+
{
6+
/// <summary>
7+
/// Results of configuring a relationship
8+
/// </summary>
9+
public interface IResourceTypeRelationshipConfiguration
10+
{
11+
/// <summary>
12+
/// The <see cref="IRelatedResourceDocumentMaterializer"/> type to use for materializing this relationship
13+
/// </summary>
14+
Type MaterializerType { get; }
15+
}
16+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using JSONAPI.Http;
2+
3+
namespace JSONAPI.Configuration
4+
{
5+
/// <summary>
6+
/// Configuration mechanism for relationships
7+
/// </summary>
8+
public interface IResourceTypeRelationshipConfigurator
9+
{
10+
/// <summary>
11+
/// Specify the materializer type to use for this particular relationship
12+
/// </summary>
13+
void UseMaterializer<TMaterializerType>() where TMaterializerType : IRelatedResourceDocumentMaterializer;
14+
}
15+
}

JSONAPI/Configuration/JsonApiConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void RegisterResourceType<TResourceType>(Action<ResourceTypeConfiguration
6767
/// <summary>
6868
/// Registers an entity type/resource type pair for use with MappedDocumentMaterializer />
6969
/// </summary>
70-
public void RegisterMappedType<TEntity, TResourceType, TMaterializer>(Action<ResourceTypeConfiguration<TResourceType>> configurationAction = null)
70+
public void RegisterMappedType<TEntity, TResourceType, TMaterializer>(Action<IResourceTypeConfigurator<TResourceType>> configurationAction = null)
7171
where TMaterializer : MappedDocumentMaterializer<TEntity, TResourceType>
7272
where TResourceType : class
7373
{

JSONAPI/Configuration/ResourceTypeConfiguration.cs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace JSONAPI.Configuration
1212
/// Configuration mechanism for resource types.
1313
/// </summary>
1414
/// <typeparam name="TResourceType"></typeparam>
15-
public sealed class ResourceTypeConfiguration<TResourceType> : IResourceTypeConfiguration
15+
public sealed class ResourceTypeConfiguration<TResourceType> : IResourceTypeConfiguration, IResourceTypeConfigurator<TResourceType>
1616
{
1717
private readonly IResourceTypeRegistrar _resourceTypeRegistrar;
1818

@@ -30,28 +30,21 @@ internal ResourceTypeConfiguration(IResourceTypeRegistrar resourceTypeRegistrar)
3030
public Func<ParameterExpression, string, BinaryExpression> FilterByIdExpressionFactory { get; private set; }
3131
public Func<ParameterExpression, Expression> SortByIdExpressionFactory { get; private set; }
3232

33-
/// <summary>
34-
/// Configures the relationship corresponding to the specified property
35-
/// </summary>
3633
public void ConfigureRelationship(Expression<Func<TResourceType, object>> property,
37-
Action<ResourceTypeRelationshipConfiguration> relationshipConfiguration)
34+
Action<IResourceTypeRelationshipConfigurator> configurationAction)
3835
{
3936
if (property == null) throw new ArgumentNullException("property");
40-
if (relationshipConfiguration == null) throw new ArgumentNullException("relationshipConfiguration");
37+
if (configurationAction == null) throw new ArgumentNullException("configurationAction");
4138

4239
var member = (MemberExpression) property.Body;
4340
var propertyInfo = (PropertyInfo) member.Member;
4441

4542
var config = new ResourceTypeRelationshipConfiguration();
46-
relationshipConfiguration(config);
43+
configurationAction(config);
4744

4845
RelationshipConfigurations[propertyInfo] = config;
4946
}
5047

51-
/// <summary>
52-
/// Specifies the materializer to use for this resource type
53-
/// </summary>
54-
/// <typeparam name="TMaterializer"></typeparam>
5548
public void UseDocumentMaterializer<TMaterializer>()
5649
where TMaterializer : IDocumentMaterializer
5750
{

JSONAPI/Configuration/ResourceTypeRelationshipConfiguration.cs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,20 @@
44
namespace JSONAPI.Configuration
55
{
66
/// <summary>
7-
/// Default implementation of <see cref="IResourceTypeRelationshipConfiguration"/>
7+
/// Allows configuring a relationship
88
/// </summary>
9-
public sealed class ResourceTypeRelationshipConfiguration : IResourceTypeRelationshipConfiguration
9+
public sealed class ResourceTypeRelationshipConfiguration : IResourceTypeRelationshipConfiguration, IResourceTypeRelationshipConfigurator
1010
{
1111
internal ResourceTypeRelationshipConfiguration()
1212
{
1313
}
1414

1515
public Type MaterializerType { get; private set; }
1616

17-
/// <summary>
18-
/// Specify the materializer type to use for this particular relationship
19-
/// </summary>
2017
public void UseMaterializer<TMaterializerType>()
2118
where TMaterializerType : IRelatedResourceDocumentMaterializer
2219
{
2320
MaterializerType = typeof (TMaterializerType);
2421
}
2522
}
26-
27-
/// <summary>
28-
/// Configuration mechanism for relationships
29-
/// </summary>
30-
public interface IResourceTypeRelationshipConfiguration
31-
{
32-
/// <summary>
33-
/// The <see cref="IRelatedResourceDocumentMaterializer"/> type to use for materializing this relationship
34-
/// </summary>
35-
Type MaterializerType { get; }
36-
}
3723
}

JSONAPI/JSONAPI.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@
6868
</ItemGroup>
6969
<ItemGroup>
7070
<Compile Include="Configuration\IResourceTypeConfiguration.cs" />
71+
<Compile Include="Configuration\IResourceTypeConfigurator.cs" />
72+
<Compile Include="Configuration\IResourceTypeRelationshipConfiguration.cs" />
73+
<Compile Include="Configuration\IResourceTypeRelationshipConfigurator.cs" />
7174
<Compile Include="Configuration\JsonApiConfiguration.cs" />
7275
<Compile Include="Configuration\ResourceTypeConfiguration.cs" />
7376
<Compile Include="Configuration\ResourceTypeRelationshipConfiguration.cs" />

0 commit comments

Comments
 (0)