Skip to content

Commit 0b3fd31

Browse files
committed
Added service events, adding unit test host, refactored service configurators
1 parent f8fbe86 commit 0b3fd31

29 files changed

+929
-208
lines changed

src/Topshelf.Rehab/RehabServiceExtensions.cs

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
namespace Topshelf
1414
{
1515
using System;
16-
using Builders;
1716
using HostConfigurators;
1817
using Rehab;
1918
using Runtime;
19+
using ServiceConfigurators;
2020

2121
public static class RehabServiceExtensions
2222
{
@@ -26,44 +26,49 @@ public static HostConfigurator RehabService<T>(this HostConfigurator configurato
2626
if (configurator == null)
2727
throw new ArgumentNullException("configurator");
2828

29-
ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => new T());
29+
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(x => new T(),
30+
NoCallback);
3031

31-
ServiceBuilderFactory updaterFactory = settings => new RehabServiceBuilder<T>(factory);
32-
33-
configurator.UseServiceBuilder(updaterFactory);
34-
35-
return configurator;
32+
return RehabService<T>(configurator, serviceBuilderFactory);
3633
}
3734

38-
public static HostConfigurator RehabService<T>(this HostConfigurator configurator, Func<T> serviceFactory)
35+
public static HostConfigurator RehabService<T>(this HostConfigurator configurator, Func<T> factory)
3936
where T : class, ServiceControl
4037
{
4138
if (configurator == null)
4239
throw new ArgumentNullException("configurator");
4340

44-
ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => serviceFactory());
45-
46-
ServiceBuilderFactory updaterFactory = settings => new RehabServiceBuilder<T>(factory);
41+
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(x => factory(),
42+
NoCallback);
4743

48-
configurator.UseServiceBuilder(updaterFactory);
49-
50-
return configurator;
44+
return RehabService<T>(configurator, serviceBuilderFactory);
5145
}
5246

53-
public static HostConfigurator RehabService<T>(this HostConfigurator configurator,
54-
Func<HostSettings, T> serviceFactory)
47+
public static HostConfigurator RehabService<T>(this HostConfigurator configurator, Func<HostSettings, T> factory)
5548
where T : class, ServiceControl
5649
{
5750
if (configurator == null)
5851
throw new ArgumentNullException("configurator");
5952

60-
ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => serviceFactory(x));
53+
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(factory,
54+
NoCallback);
6155

62-
ServiceBuilderFactory updaterFactory = settings => new RehabServiceBuilder<T>(factory);
56+
return RehabService<T>(configurator, serviceBuilderFactory);
57+
}
58+
59+
public static HostConfigurator RehabService<T>(this HostConfigurator configurator,
60+
ServiceBuilderFactory serviceBuilderFactory)
61+
where T : class
62+
{
63+
ServiceBuilderFactory rehabFactory = settings => new RehabServiceBuilder<T>(serviceBuilderFactory);
6364

64-
configurator.UseServiceBuilder(updaterFactory);
65+
configurator.UseServiceBuilder(rehabFactory);
6566

6667
return configurator;
6768
}
69+
70+
static void NoCallback(ServiceConfigurator configurator)
71+
{
72+
}
6873
}
6974
}

src/Topshelf.Supervise/SuperviseConfigurator.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313
namespace Topshelf
1414
{
1515
using HostConfigurators;
16+
using ServiceConfigurators;
1617

1718
/// <summary>
1819
/// Configures the service that is to be supervised, including any of the parameters
1920
/// of the supervision service
2021
/// </summary>
21-
public interface SuperviseConfigurator
22+
public interface SuperviseConfigurator :
23+
ServiceConfigurator
2224
{
2325
/// <summary>
2426
/// Sets the service builder to use for creating the service

src/Topshelf.Supervise/SuperviseServiceBuilder.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ public class SuperviseServiceBuilder :
2121
ServiceBuilder
2222
{
2323
readonly ServiceBuilderFactory _serviceBuilderFactory;
24+
readonly ServiceEvents _serviceEvents;
2425

25-
public SuperviseServiceBuilder(ServiceBuilderFactory serviceBuilderFactory)
26+
public SuperviseServiceBuilder(ServiceBuilderFactory serviceBuilderFactory, ServiceEvents serviceEvents)
2627
{
2728
_serviceBuilderFactory = serviceBuilderFactory;
29+
_serviceEvents = serviceEvents;
2830
}
2931

3032
public ServiceHandle Build(HostSettings settings)
@@ -35,7 +37,7 @@ public ServiceHandle Build(HostSettings settings)
3537

3638

3739
var builder = new ControlServiceBuilder<SuperviseService>(
38-
x => new SuperviseService(x, serviceAvailability, _serviceBuilderFactory));
40+
x => new SuperviseService(x, serviceAvailability, _serviceBuilderFactory), _serviceEvents);
3941

4042
ServiceHandle serviceHandle = builder.Build(settings);
4143

src/Topshelf.Supervise/SuperviseServiceConfigurator.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ namespace Topshelf.Supervise
1616
using Builders;
1717
using Configurators;
1818
using HostConfigurators;
19+
using ServiceConfigurators;
1920

2021
public class SuperviseServiceConfigurator :
22+
ServiceConfiguratorBase,
2123
SuperviseConfigurator,
2224
Configurator
2325
{
@@ -36,7 +38,7 @@ public void UseServiceBuilder(ServiceBuilderFactory serviceBuilderFactory)
3638

3739
public ServiceBuilder Build()
3840
{
39-
return new SuperviseServiceBuilder(_serviceBuilderFactory);
41+
return new SuperviseServiceBuilder(_serviceBuilderFactory, ServiceEvents);
4042
}
4143
}
4244
}

src/Topshelf.Supervise/SuperviseServiceExtensions.cs

Lines changed: 69 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@
1313
namespace Topshelf
1414
{
1515
using System;
16-
using System.Linq;
17-
using Builders;
18-
using Configurators;
1916
using HostConfigurators;
2017
using Runtime;
2118
using ServiceConfigurators;
@@ -28,9 +25,25 @@ public static SuperviseConfigurator Service<T>(this SuperviseConfigurator config
2825
if (configurator == null)
2926
throw new ArgumentNullException("configurator");
3027

31-
ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => new T());
28+
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(x => new T(),
29+
NoCallback);
3230

33-
configurator.UseServiceBuilder(factory);
31+
configurator.UseServiceBuilder(serviceBuilderFactory);
32+
33+
return configurator;
34+
}
35+
36+
public static SuperviseConfigurator Service<T>(this SuperviseConfigurator configurator,
37+
Action<ServiceConfigurator> callback)
38+
where T : class, ServiceControl, new()
39+
{
40+
if (configurator == null)
41+
throw new ArgumentNullException("configurator");
42+
43+
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(x => new T(),
44+
callback);
45+
46+
configurator.UseServiceBuilder(serviceBuilderFactory);
3447

3548
return configurator;
3649
}
@@ -41,9 +54,25 @@ public static SuperviseConfigurator Service<T>(this SuperviseConfigurator config
4154
if (configurator == null)
4255
throw new ArgumentNullException("configurator");
4356

44-
ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => serviceFactory());
57+
ServiceBuilderFactory serviceBuilderFactory =
58+
ServiceExtensions.CreateServiceBuilderFactory(x => serviceFactory(), NoCallback);
4559

46-
configurator.UseServiceBuilder(factory);
60+
configurator.UseServiceBuilder(serviceBuilderFactory);
61+
62+
return configurator;
63+
}
64+
65+
public static SuperviseConfigurator Service<T>(this SuperviseConfigurator configurator, Func<T> serviceFactory,
66+
Action<ServiceConfigurator> callback)
67+
where T : class, ServiceControl
68+
{
69+
if (configurator == null)
70+
throw new ArgumentNullException("configurator");
71+
72+
ServiceBuilderFactory serviceBuilderFactory =
73+
ServiceExtensions.CreateServiceBuilderFactory(x => serviceFactory(), callback);
74+
75+
configurator.UseServiceBuilder(serviceBuilderFactory);
4776

4877
return configurator;
4978
}
@@ -55,9 +84,34 @@ public static SuperviseConfigurator Service<T>(this SuperviseConfigurator config
5584
if (configurator == null)
5685
throw new ArgumentNullException("configurator");
5786

58-
ServiceBuilderFactory factory = settings => new ControlServiceBuilder<T>(x => serviceFactory(x));
87+
ServiceBuilderFactory serviceBuilderFactory =
88+
ServiceExtensions.CreateServiceBuilderFactory(serviceFactory, NoCallback);
5989

60-
configurator.UseServiceBuilder(factory);
90+
configurator.UseServiceBuilder(serviceBuilderFactory);
91+
92+
return configurator;
93+
}
94+
95+
public static SuperviseConfigurator Service<T>(this SuperviseConfigurator configurator,
96+
Func<HostSettings, T> serviceFactory, Action<ServiceConfigurator> callback)
97+
where T : class, ServiceControl
98+
{
99+
if (configurator == null)
100+
throw new ArgumentNullException("configurator");
101+
102+
ServiceBuilderFactory serviceBuilderFactory =
103+
ServiceExtensions.CreateServiceBuilderFactory(serviceFactory, callback);
104+
105+
configurator.UseServiceBuilder(serviceBuilderFactory);
106+
107+
return configurator;
108+
}
109+
110+
public static HostConfigurator Service<T>(this HostConfigurator configurator,
111+
ServiceBuilderFactory serviceBuilderFactory)
112+
where T : class
113+
{
114+
configurator.UseServiceBuilder(serviceBuilderFactory);
61115

62116
return configurator;
63117
}
@@ -69,26 +123,16 @@ public static SuperviseConfigurator Service<TService>(this SuperviseConfigurator
69123
{
70124
if (configurator == null)
71125
throw new ArgumentNullException("configurator");
72-
if (callback == null)
73-
throw new ArgumentNullException("callback");
74-
75-
var serviceConfigurator = new DelegateServiceConfigurator<TService>();
76126

77-
callback(serviceConfigurator);
127+
ServiceBuilderFactory serviceBuilderFactory = ServiceExtensions.CreateServiceBuilderFactory(callback);
78128

79-
configurator.UseServiceBuilder(x =>
80-
{
81-
ConfigurationResult configurationResult =
82-
ValidateConfigurationResult.CompileResults(serviceConfigurator.Validate());
83-
if (configurationResult.Results.Any())
84-
throw new HostConfigurationException("The service was not properly configured");
85-
86-
ServiceBuilder serviceBuilder = serviceConfigurator.Build();
87-
88-
return serviceBuilder;
89-
});
129+
configurator.UseServiceBuilder(serviceBuilderFactory);
90130

91131
return configurator;
92132
}
133+
134+
static void NoCallback(ServiceConfigurator configurator)
135+
{
136+
}
93137
}
94138
}

0 commit comments

Comments
 (0)