Skip to content

Commit 40a9621

Browse files
committed
Refactored JsonServicesConfig class.
1 parent 55d82f3 commit 40a9621

File tree

4 files changed

+39
-33
lines changed

4 files changed

+39
-33
lines changed

sample/sample-core-server/JsonServicesConfig.cs

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,59 +18,46 @@ public class JsonServicesConfig
1818
public JsonServicesConfig(IServiceCollection services)
1919
{
2020
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-
{
3321
Services.AddSingleton<IServer, JsonServicesConnectionManager>();
3422
Services.AddSingleton<JsonServer>();
3523

36-
if (NeedsSerializer)
37-
{
38-
AddSerializer<Serializer>();
39-
}
24+
// default service implementations
25+
AddSerializer<Serializer>();
26+
AddServiceExecutor<ServiceExecutor>();
27+
AddTypeProvider<MessageTypeProvider>();
28+
}
4029

41-
if (NeedsServiceExecutor)
42-
{
43-
AddServiceExecutor<ServiceExecutor>();
44-
}
30+
public IServiceCollection Services { get; }
4531

46-
if (NeedsMessageTypeProvider)
32+
private void RemoveRegistration<IService>()
33+
{
34+
var descriptor = Services.FirstOrDefault(d => d.ServiceType == typeof(IService));
35+
if (descriptor != null)
4736
{
48-
AddTypeProvider<MessageTypeProvider>();
37+
Services.Remove(descriptor);
4938
}
50-
51-
return Services;
5239
}
5340

5441
public JsonServicesConfig AddSerializer<TSerializer>()
5542
where TSerializer : class, ISerializer
5643
{
57-
NeedsSerializer = false;
44+
RemoveRegistration<ISerializer>();
5845
Services.AddSingleton<ISerializer, TSerializer>();
5946
return this;
6047
}
6148

6249
public JsonServicesConfig AddServiceExecutor<TServiceExecutor>()
6350
where TServiceExecutor : class, IServiceExecutor
6451
{
65-
NeedsServiceExecutor = false;
52+
RemoveRegistration<ISerializer>();
6653
Services.AddSingleton<IServiceExecutor, ServiceExecutor>();
6754
return this;
6855
}
6956

7057
public JsonServicesConfig AddTypeProvider<TMessageTypeProvider>()
7158
where TMessageTypeProvider : class, IMessageTypeProvider
7259
{
73-
NeedsMessageTypeProvider = false;
60+
RemoveRegistration<ISerializer>();
7461
Services.AddSingleton<IMessageTypeProvider, TMessageTypeProvider>();
7562
return this;
7663
}

sample/sample-core-server/JsonServicesMiddlewareExtensions.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,30 @@ namespace JsonServices.Sample.CoreServer
66
{
77
public static class JsonServicesMiddlewareExtensions
88
{
9-
public static IApplicationBuilder UseJsonServices(this IApplicationBuilder builder) =>
10-
builder.UseMiddleware<JsonServicesMiddleware>();
11-
9+
/// <summary>
10+
/// Adds services requires for JsonServices.
11+
/// </summary>
12+
/// <remarks>
13+
/// This method should be called from Startup.ConfigureServices method.
14+
/// </remarks>
15+
/// <param name="services"><see cref="IServiceCollection"/> instance.</param>
16+
/// <param name="configFunction">Additional configuration callback.</param>
1217
public static IServiceCollection AddJsonServices(this IServiceCollection services,
1318
Func<JsonServicesConfig, JsonServicesConfig> configFunction = null)
1419
{
1520
var config = new JsonServicesConfig(services);
1621
configFunction?.Invoke(config);
17-
return config.GetServices();
22+
return config.Services;
1823
}
24+
25+
/// <summary>
26+
/// Initializes JsonServices request pipeline handler.
27+
/// </summary>
28+
/// <remarks>
29+
/// This method should by called from Startup.Configure method.
30+
/// </remarks>
31+
/// <param name="builder">Application builder.</param>
32+
public static IApplicationBuilder UseJsonServices(this IApplicationBuilder builder) =>
33+
builder.UseMiddleware<JsonServicesMiddleware>();
1934
}
2035
}

sample/sample-core-server/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"JsonServices.Sample.Server": {
1919
"commandName": "Project",
2020
"launchBrowser": true,
21-
"applicationUrl": "https://localhost:5001;http://localhost:5000",
21+
"applicationUrl": "https://localhost:8766;http://localhost:8765",
2222
"environmentVariables": {
2323
"ASPNETCORE_ENVIRONMENT": "Development"
2424
}

sample/sample-core-server/Startup.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,18 @@
99

1010
namespace JsonServices.Sample.CoreServer
1111
{
12+
using Serializer = Serialization.ServiceStack.Serializer;
13+
1214
public class Startup
1315
{
1416
// This method gets called by the runtime. Use this method to add services to the container.
1517
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
1618
public void ConfigureServices(IServiceCollection services)
1719
{
1820
// setup JsonServices infrastructure services
19-
services.AddJsonServices();
21+
services.AddJsonServices(c =>
22+
c.AddSerializer<Serializer>()
23+
);
2024
}
2125

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

0 commit comments

Comments
 (0)