internal class GreetService : ServiceBase { protected virtual IGreeter Greeter { get; private set; } protected virtual ILogger Logger { get; private set; } public GreetService(IServiceNameProvider serviceNameProvider, ILogger logger, IGreetServiceWorker worker) { serviceNameProvider.ThrowIfNull("serviceNameProvider"); ServiceName = serviceNameProvider.ServiceName .ThrowIfNullOrEmpty("serviceNameProvider.ServiceName"); Logger = logger.ThrowIfNull("logger"); Worker = worker.ThrowIfNull("worker"); CanStop = true; AutoLog = true; } protected IGreetServiceWorker Worker { get; set; } protected override void OnStart(String[] args) { Logger.Message("Starting service."); if (Worker.Started) { try { Worker.Start(); Logger.Message("Service started."); } catch (Exception ex) { Logger.ExceptionAlone(ex); } } else { Logger.Message("Cannot start service. Service is already running."); } } protected override void OnStop() { Logger.Message("Stopping service."); Worker.Stop(); Logger.Message("Service stopped."); } }