Skip to content

Commit 00dee31

Browse files
author
Chris Santero
committed
move generic parameter to interface for IPayloadMaterializer
1 parent fefc3f2 commit 00dee31

11 files changed

Lines changed: 35 additions & 36 deletions

File tree

JSONAPI.EntityFramework.Tests.TestWebApp/Controllers/CommentsController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace JSONAPI.EntityFramework.Tests.TestWebApp.Controllers
55
{
66
public class CommentsController : JsonApiController<Comment>
77
{
8-
public CommentsController(IPayloadMaterializer payloadMaterializer) : base(payloadMaterializer)
8+
public CommentsController(IPayloadMaterializer<Comment> payloadMaterializer) : base(payloadMaterializer)
99
{
1010
}
1111
}

JSONAPI.EntityFramework.Tests.TestWebApp/Controllers/PostsController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace JSONAPI.EntityFramework.Tests.TestWebApp.Controllers
55
{
66
public class PostsController : JsonApiController<Post>
77
{
8-
public PostsController(IPayloadMaterializer payloadMaterializer) : base(payloadMaterializer)
8+
public PostsController(IPayloadMaterializer<Post> payloadMaterializer) : base(payloadMaterializer)
99
{
1010
}
1111
}

JSONAPI.EntityFramework.Tests.TestWebApp/Controllers/TagsController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace JSONAPI.EntityFramework.Tests.TestWebApp.Controllers
55
{
66
public class TagsController : JsonApiController<Tag>
77
{
8-
public TagsController(IPayloadMaterializer payloadMaterializer) : base(payloadMaterializer)
8+
public TagsController(IPayloadMaterializer<Tag> payloadMaterializer) : base(payloadMaterializer)
99
{
1010
}
1111
}

JSONAPI.EntityFramework.Tests.TestWebApp/Controllers/UserGroupsController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace JSONAPI.EntityFramework.Tests.TestWebApp.Controllers
55
{
66
public class UserGroupsController : JsonApiController<UserGroup>
77
{
8-
public UserGroupsController(IPayloadMaterializer payloadMaterializer) : base(payloadMaterializer)
8+
public UserGroupsController(IPayloadMaterializer<UserGroup> payloadMaterializer) : base(payloadMaterializer)
99
{
1010
}
1111
}

JSONAPI.EntityFramework.Tests.TestWebApp/Controllers/UsersController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace JSONAPI.EntityFramework.Tests.TestWebApp.Controllers
55
{
66
public class UsersController : JsonApiController<User>
77
{
8-
public UsersController(IPayloadMaterializer payloadMaterializer) : base(payloadMaterializer)
8+
public UsersController(IPayloadMaterializer<User> payloadMaterializer) : base(payloadMaterializer)
99
{
1010
}
1111
}

JSONAPI.EntityFramework.Tests.TestWebApp/Startup.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ public void Configuration(IAppBuilder app)
6161

6262
var containerBuilder = new ContainerBuilder();
6363
containerBuilder.RegisterModule(module);
64-
containerBuilder.RegisterType<EntityFrameworkPayloadMaterializer>()
64+
containerBuilder.RegisterGeneric(typeof (EntityFrameworkPayloadMaterializer<>))
6565
.WithParameter("apiBaseUrl", "https://www.example.com")
66-
.As<IPayloadMaterializer>();
66+
.AsImplementedInterfaces();
6767
containerBuilder.Register(c => HttpContext.Current.GetOwinContext()).As<IOwinContext>();
6868
containerBuilder.Register(c => c.Resolve<IOwinContext>().Get<TestDbContext>(DbContextKey)).AsSelf().As<DbContext>();
6969
containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());

JSONAPI.EntityFramework/Http/EntityFrameworkPayloadMaterializer.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
namespace JSONAPI.EntityFramework.Http
1212
{
1313
/// <summary>
14-
/// Implementation of <see cref="IPayloadMaterializer"/> for use with Entity Framework.
14+
/// Implementation of IPayloadMaterializer for use with Entity Framework.
1515
/// </summary>
16-
public class EntityFrameworkPayloadMaterializer : IPayloadMaterializer
16+
public class EntityFrameworkPayloadMaterializer<T> : IPayloadMaterializer<T> where T : class
1717
{
1818
private readonly string _apiBaseUrl;
1919
private readonly DbContext _dbContext;
@@ -43,19 +43,20 @@ public EntityFrameworkPayloadMaterializer(
4343
_singleResourcePayloadBuilder = singleResourcePayloadBuilder;
4444
}
4545

46-
public Task<IResourceCollectionPayload> GetRecords<T>(HttpRequestMessage request, CancellationToken cancellationToken) where T : class
46+
public Task<IResourceCollectionPayload> GetRecords(HttpRequestMessage request, CancellationToken cancellationToken)
4747
{
4848
var query = _dbContext.Set<T>().AsQueryable();
4949
return _queryableResourceCollectionPayloadBuilder.BuildPayload(query, request, cancellationToken);
5050
}
5151

52-
public async Task<ISingleResourcePayload> GetRecordById<T>(string id, HttpRequestMessage request, CancellationToken cancellationToken) where T : class
52+
public async Task<ISingleResourcePayload> GetRecordById(string id, HttpRequestMessage request, CancellationToken cancellationToken)
5353
{
5454
var singleResource = await _dbContext.Set<T>().FindAsync(cancellationToken, id);
5555
return _singleResourcePayloadBuilder.BuildPayload(singleResource, _apiBaseUrl, null);
5656
}
5757

58-
public async Task<ISingleResourcePayload> CreateRecord<T>(ISingleResourcePayload requestPayload, HttpRequestMessage request, CancellationToken cancellationToken) where T : class
58+
public async Task<ISingleResourcePayload> CreateRecord(ISingleResourcePayload requestPayload,
59+
HttpRequestMessage request, CancellationToken cancellationToken)
5960
{
6061
var newRecord = await MaterializeAsync(requestPayload.PrimaryData, cancellationToken);
6162
var returnPayload = _singleResourcePayloadBuilder.BuildPayload(newRecord, _apiBaseUrl, null);
@@ -64,7 +65,8 @@ public async Task<ISingleResourcePayload> CreateRecord<T>(ISingleResourcePayload
6465
return returnPayload;
6566
}
6667

67-
public async Task<ISingleResourcePayload> UpdateRecord<T>(string id, ISingleResourcePayload requestPayload, HttpRequestMessage request, CancellationToken cancellationToken) where T : class
68+
public async Task<ISingleResourcePayload> UpdateRecord(string id, ISingleResourcePayload requestPayload,
69+
HttpRequestMessage request, CancellationToken cancellationToken)
6870
{
6971
var newRecord = await MaterializeAsync(requestPayload.PrimaryData, cancellationToken);
7072
var returnPayload = _singleResourcePayloadBuilder.BuildPayload(newRecord, _apiBaseUrl, null);
@@ -73,7 +75,7 @@ public async Task<ISingleResourcePayload> UpdateRecord<T>(string id, ISingleReso
7375
return returnPayload;
7476
}
7577

76-
public async Task<IJsonApiPayload> DeleteRecord<T>(string id, CancellationToken cancellationToken) where T : class
78+
public async Task<IJsonApiPayload> DeleteRecord(string id, CancellationToken cancellationToken)
7779
{
7880
var singleResource = await _dbContext.Set<T>().FindAsync(cancellationToken, id);
7981
_dbContext.Set<T>().Remove(singleResource);

JSONAPI.TodoMVC.API/Controllers/TodosController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace JSONAPI.TodoMVC.API.Controllers
55
{
66
public class TodosController : JsonApiController<Todo>
77
{
8-
public TodosController(IPayloadMaterializer payloadMaterializer) : base(payloadMaterializer)
8+
public TodosController(IPayloadMaterializer<Todo> payloadMaterializer) : base(payloadMaterializer)
99
{
1010
}
1111
}

JSONAPI.TodoMVC.API/Startup.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
using System.Web.Http;
22
using Autofac;
3-
using Autofac.Integration.WebApi;
43
using JSONAPI.Autofac;
54
using JSONAPI.Core;
65
using JSONAPI.EntityFramework.Http;
7-
using JSONAPI.Http;
86
using JSONAPI.TodoMVC.API.Models;
97
using Owin;
108

@@ -32,9 +30,9 @@ private static HttpConfiguration GetWebApiConfiguration()
3230

3331
var containerBuilder = new ContainerBuilder();
3432
containerBuilder.RegisterModule(module);
35-
containerBuilder.RegisterType<EntityFrameworkPayloadMaterializer>()
33+
containerBuilder.RegisterGeneric(typeof(EntityFrameworkPayloadMaterializer<>))
3634
.WithParameter("apiBaseUrl", "https://www.example.com")
37-
.As<IPayloadMaterializer>();
35+
.AsImplementedInterfaces();
3836
var container = containerBuilder.Build();
3937
httpConfig.UseJsonApiWithAutofac(container);
4038

JSONAPI/Http/IPayloadMaterializer.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,43 +8,42 @@ namespace JSONAPI.Http
88
/// <summary>
99
/// This service provides the glue between JSONAPI.NET and your persistence layer.
1010
/// </summary>
11-
public interface IPayloadMaterializer
11+
public interface IPayloadMaterializer<T> where T : class
1212
{
1313
/// <summary>
1414
/// Returns a payload containing records that are filtered, sorted,
1515
/// and paginated according to query parameters present in the provided request.
1616
/// </summary>
1717
/// <returns></returns>
18-
Task<IResourceCollectionPayload> GetRecords<T>(HttpRequestMessage request, CancellationToken cancellationToken)
19-
where T : class;
18+
Task<IResourceCollectionPayload> GetRecords(HttpRequestMessage request, CancellationToken cancellationToken);
2019

2120
/// <summary>
2221
/// Returns a payload with the resource identified by the given ID.
2322
/// </summary>
2423
/// <returns></returns>
25-
Task<ISingleResourcePayload> GetRecordById<T>(string id, HttpRequestMessage request,
26-
CancellationToken cancellationToken) where T : class;
24+
Task<ISingleResourcePayload> GetRecordById(string id, HttpRequestMessage request,
25+
CancellationToken cancellationToken);
2726

2827
/// <summary>
2928
/// Creates a record corresponding to the data in the request payload, and returns a payload
3029
/// corresponding to the created record.
3130
/// </summary>
3231
/// <returns></returns>
33-
Task<ISingleResourcePayload> CreateRecord<T>(ISingleResourcePayload requestPayload, HttpRequestMessage request,
34-
CancellationToken cancellationToken) where T : class;
32+
Task<ISingleResourcePayload> CreateRecord(ISingleResourcePayload requestPayload, HttpRequestMessage request,
33+
CancellationToken cancellationToken);
3534

3635
/// <summary>
3736
/// Updates the record corresponding to the data in the request payload, and returns a payload
3837
/// corresponding to the updated record.
3938
/// </summary>
4039
/// <returns></returns>
41-
Task<ISingleResourcePayload> UpdateRecord<T>(string id, ISingleResourcePayload requestPayload,
42-
HttpRequestMessage request, CancellationToken cancellationToken) where T : class;
40+
Task<ISingleResourcePayload> UpdateRecord(string id, ISingleResourcePayload requestPayload,
41+
HttpRequestMessage request, CancellationToken cancellationToken);
4342

4443
/// <summary>
4544
/// Deletes the record corresponding to the given id.
4645
/// </summary>
4746
/// <returns></returns>
48-
Task<IJsonApiPayload> DeleteRecord<T>(string id, CancellationToken cancellationToken) where T : class;
47+
Task<IJsonApiPayload> DeleteRecord(string id, CancellationToken cancellationToken);
4948
}
5049
}

0 commit comments

Comments
 (0)