Skip to content

Commit 55d82f3

Browse files
committed
Refactored JsonServicesMiddlewareExtensions, added JsonServicesConfig helper.
1 parent b3e6689 commit 55d82f3

File tree

4 files changed

+86
-23
lines changed

4 files changed

+86
-23
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using JsonServices.Serialization;
6+
using JsonServices.Services;
7+
using JsonServices.Transport;
8+
using Microsoft.Extensions.DependencyInjection;
9+
10+
namespace JsonServices.Sample.CoreServer
11+
{
12+
using Serializer = Serialization.ServiceStack.Serializer;
13+
using ServiceExecutor = Tests.Services.StubExecutor;
14+
using MessageTypeProvider = Tests.Services.StubMessageTypeProvider;
15+
16+
public class JsonServicesConfig
17+
{
18+
public JsonServicesConfig(IServiceCollection services)
19+
{
20+
Services = services;
21+
}
22+
23+
private IServiceCollection Services { get; }
24+
25+
private bool NeedsSerializer { get; set; } = true;
26+
27+
private bool NeedsServiceExecutor { get; set; } = true;
28+
29+
private bool NeedsMessageTypeProvider { get; set; } = true;
30+
31+
public IServiceCollection GetServices()
32+
{
33+
Services.AddSingleton<IServer, JsonServicesConnectionManager>();
34+
Services.AddSingleton<JsonServer>();
35+
36+
if (NeedsSerializer)
37+
{
38+
AddSerializer<Serializer>();
39+
}
40+
41+
if (NeedsServiceExecutor)
42+
{
43+
AddServiceExecutor<ServiceExecutor>();
44+
}
45+
46+
if (NeedsMessageTypeProvider)
47+
{
48+
AddTypeProvider<MessageTypeProvider>();
49+
}
50+
51+
return Services;
52+
}
53+
54+
public JsonServicesConfig AddSerializer<TSerializer>()
55+
where TSerializer : class, ISerializer
56+
{
57+
NeedsSerializer = false;
58+
Services.AddSingleton<ISerializer, TSerializer>();
59+
return this;
60+
}
61+
62+
public JsonServicesConfig AddServiceExecutor<TServiceExecutor>()
63+
where TServiceExecutor : class, IServiceExecutor
64+
{
65+
NeedsServiceExecutor = false;
66+
Services.AddSingleton<IServiceExecutor, ServiceExecutor>();
67+
return this;
68+
}
69+
70+
public JsonServicesConfig AddTypeProvider<TMessageTypeProvider>()
71+
where TMessageTypeProvider : class, IMessageTypeProvider
72+
{
73+
NeedsMessageTypeProvider = false;
74+
Services.AddSingleton<IMessageTypeProvider, TMessageTypeProvider>();
75+
return this;
76+
}
77+
}
78+
}

sample/sample-core-server/JsonServicesConnectionManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public async Task HandleIncomingMessages(WebSocket webSocket)
4242
ConnectionId = connection.ConnectionId,
4343
});
4444

45-
// 2. TODO: handle incoming messages in a loop until the socket is closed
45+
// 2. handle incoming messages in a loop until the socket is closed
4646
await ReceiveMessages(connection);
4747

4848
// 3. disconnect the client
Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Threading.Tasks;
5-
using JsonServices.Serialization;
6-
using JsonServices.Services;
7-
using JsonServices.Transport;
82
using Microsoft.AspNetCore.Builder;
93
using Microsoft.Extensions.DependencyInjection;
104

@@ -15,17 +9,12 @@ public static class JsonServicesMiddlewareExtensions
159
public static IApplicationBuilder UseJsonServices(this IApplicationBuilder builder) =>
1610
builder.UseMiddleware<JsonServicesMiddleware>();
1711

18-
public static IServiceCollection AddJsonServices<TSerializer, TServiceExecutor, TMessageTypeProvider>(this IServiceCollection services)
19-
where TSerializer : class, ISerializer
20-
where TServiceExecutor : class, IServiceExecutor
21-
where TMessageTypeProvider : class, IMessageTypeProvider
12+
public static IServiceCollection AddJsonServices(this IServiceCollection services,
13+
Func<JsonServicesConfig, JsonServicesConfig> configFunction = null)
2214
{
23-
services.AddSingleton<ISerializer, TSerializer>();
24-
services.AddSingleton<IServiceExecutor, TServiceExecutor>();
25-
services.AddSingleton<IMessageTypeProvider, TMessageTypeProvider>();
26-
services.AddSingleton<IServer, JsonServicesConnectionManager>();
27-
services.AddSingleton<JsonServer>();
28-
return services;
15+
var config = new JsonServicesConfig(services);
16+
configFunction?.Invoke(config);
17+
return config.GetServices();
2918
}
3019
}
3120
}

sample/sample-core-server/Startup.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,14 @@
99

1010
namespace JsonServices.Sample.CoreServer
1111
{
12-
using Serializer = Serialization.ServiceStack.Serializer;
13-
using Executor = Tests.Services.StubExecutor;
14-
using TypeProvider = Tests.Services.StubMessageTypeProvider;
15-
1612
public class Startup
1713
{
1814
// This method gets called by the runtime. Use this method to add services to the container.
1915
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
2016
public void ConfigureServices(IServiceCollection services)
2117
{
22-
// initialize JsonServices classes
23-
services.AddJsonServices<Serializer, Executor, TypeProvider>();
18+
// setup JsonServices infrastructure services
19+
services.AddJsonServices();
2420
}
2521

2622
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

0 commit comments

Comments
 (0)